home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 May / CMCD0504.ISO / Software / Freeware / Programare / dspack / DSPACK231.exe / {app} / src / DirectX9 / Direct3D.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2003-01-26  |  213.5 KB  |  5,610 lines

  1. {******************************************************************************}
  2. {*                                                                            *}
  3. {*  Copyright (C) Microsoft Corporation.  All Rights Reserved.                *}
  4. {*                                                                            *}
  5. {*  Files:      d3dtypes.h d3dcaps.h d3d.h                                    *}
  6. {*  Content:    Direct3D8 include files                                       *}
  7. {*                                                                            *}
  8. {*  DirectX 9.0 Delphi adaptation by Alexey Barkovoy                          *}
  9. {*  E-Mail: clootie@reactor.ru                                                *}
  10. {*                                                                            *}
  11. {*  Modified: 26-Jan-2003                                                     *}
  12. {*                                                                            *}
  13. {*  Partly based upon :                                                       *}
  14. {*    DirectX 7.0 Object Pascal adaptation by                                 *}
  15. {*      Erik Unger, e-Mail: DelphiDirectX@next-reality.com                    *}
  16. {*                                                                            *}
  17. {*  Latest version can be downloaded from:                                    *}
  18. {*     http://clootie.narod.ru/delphi/                                        *}
  19. {*                                                                            *}
  20. {******************************************************************************}
  21. {                                                                              }
  22. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  23. {                                                                              }
  24. { The contents of this file are used with permission, subject to the Mozilla   }
  25. { Public License Version 1.1 (the "License"); you may not use this file except }
  26. { in compliance with the License. You may obtain a copy of the License at      }
  27. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  28. {                                                                              }
  29. { Software distributed under the License is distributed on an "AS IS" basis,   }
  30. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  31. { the specific language governing rights and limitations under the License.    }
  32. {                                                                              }
  33. { Alternatively, the contents of this file may be used under the terms of the  }
  34. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  35. { provisions of the LGPL License are applicable instead of those above.        }
  36. { If you wish to allow use of your version of this file only under the terms   }
  37. { of the LGPL License and not to allow others to use your version of this file }
  38. { under the MPL, indicate your decision by deleting  the provisions above and  }
  39. { replace  them with the notice and other provisions required by the LGPL      }
  40. { License.  If you do not delete the provisions above, a recipient may use     }
  41. { your version of this file under either the MPL or the LGPL License.          }
  42. {                                                                              }
  43. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  44. {                                                                              }
  45. {******************************************************************************}
  46.  
  47. ///////////////////////////////////////////////////////////////////////////////
  48. // Notes:
  49. //----------------------------------------------------------------------------
  50. // Possible input defines for this file, mapped to original C values:
  51. //   DIRECT3D_VERSION_8 : DIRECT3D_VERSION = 0x0800,
  52. //   DIRECT3D_VERSION_7 : DIRECT3D_VERSION = 0x0700,
  53. //   DIRECT3D_VERSION_6 : DIRECT3D_VERSION = 0x0600,
  54. //   DIRECT3D_VERSION_5 : DIRECT3D_VERSION = 0x0500,
  55. //   DIRECT3D_VERSION_LESS_5 : DIRECT3D_VERSION < 0x0500,
  56. //
  57. // By default DIRECT3D_VERSION_7 (DIRECT3D_VERSION = 0x0700) is assumed
  58. ///////////////////////////////////////////////////////////////////////////////
  59.  
  60. unit Direct3D;
  61.  
  62. {$I DirectX.inc}
  63.  
  64. // Remove "dots" below to exclude DXFile interfaces - these interfaces
  65. // are included for compatibility with original Erik Unger translation
  66. {$DEFINE EXCLUDE_DXFILE_FROM_DIRECT3D}
  67.  
  68. // Assume for what Direct3D version we will compile headers
  69. {$IFNDEF DIRECT3D_VERSION_8}
  70.   {$IFNDEF DIRECT3D_VERSION_7}
  71.     {$IFNDEF DIRECT3D_VERSION_6}
  72.       {$IFNDEF DIRECT3D_VERSION_5}
  73.         {$IFNDEF DIRECT3D_VERSION_LESS_5}
  74.           {$DEFINE DIRECT3D_VERSION_7} // Compiling for Direct3D7 by default
  75.         {$ENDIF}
  76.       {$ENDIF}
  77.     {$ENDIF}
  78.   {$ENDIF}
  79. {$ENDIF}
  80.  
  81. // Emit conditionals to C++Builder compiler
  82. {$IFDEF DIRECT3D_VERSION_8}
  83.   {$HPPEMIT '#define DIRECT3D_VERSION         0x0800'}
  84. {$ENDIF}
  85. {$IFDEF DIRECT3D_VERSION_7}
  86.   {$HPPEMIT '#define DIRECT3D_VERSION         0x0700'}
  87. {$ENDIF}
  88. {$IFDEF DIRECT3D_VERSION_6}
  89.   {$HPPEMIT '#define DIRECT3D_VERSION         0x0600'}
  90. {$ENDIF}
  91. {$IFDEF DIRECT3D_VERSION_5}
  92.   {$HPPEMIT '#define DIRECT3D_VERSION         0x0500'}
  93. {$ENDIF}
  94. {$IFDEF DIRECT3D_VERSION_LESS_5}
  95.   {$HPPEMIT '#define DIRECT3D_VERSION         0x0300'}
  96. {$ENDIF}
  97.  
  98. // Define symbols for '>=' comparision
  99. {$IFDEF DIRECT3D_VERSION_8}
  100.   {$DEFINE DIRECT3D_VERSION_7}
  101. {$ENDIF}
  102. {$IFDEF DIRECT3D_VERSION_7}
  103.   {$DEFINE DIRECT3D_VERSION_6}
  104. {$ENDIF}
  105. {$IFDEF DIRECT3D_VERSION_6}
  106.   {$DEFINE DIRECT3D_VERSION_5}
  107. {$ENDIF}
  108.  
  109. // Define symbols for '<' comparision
  110. {$IFNDEF DIRECT3D_VERSION_8}
  111.   {$DEFINE DIRECT3D_VERSION_LESS_8}
  112. {$ENDIF}
  113. {$IFNDEF DIRECT3D_VERSION_7}
  114.   {$DEFINE DIRECT3D_VERSION_LESS_7}
  115. {$ENDIF}
  116. {$IFNDEF DIRECT3D_VERSION_6}
  117.   {$DEFINE DIRECT3D_VERSION_LESS_6}
  118. {$ENDIF}
  119. {$IFNDEF DIRECT3D_VERSION_5}
  120.   {$DEFINE DIRECT3D_VERSION_LESS_5}
  121. {$ENDIF}
  122.  
  123. interface
  124.  
  125. uses
  126.   Windows, DXTypes, DirectDraw{$IFDEF DIRECT3D_VERSION_8}, Direct3D8{$ENDIF};
  127.  
  128. {$NOINCLUDE Windows}
  129. {$NOINCLUDE DXTypes}
  130. {$NOINCLUDE DirectDraw}
  131. {$IFDEF DIRECT3D_VERSION_8}
  132.   {$NOINCLUDE Direct3D8}
  133. {$ENDIF}
  134.  
  135. {$HPPEMIT '#include "d3d.h"'}
  136. {$HPPEMIT '#include "d3dtypes.h"'}
  137. {$HPPEMIT '#include "d3dcaps.h"'}
  138.  
  139. (* TD3DValue is the fundamental Direct3D fractional data type *)
  140.  
  141. type
  142.   TRefClsID = TGUID;
  143.  
  144. type
  145.   D3DVALUE = DXTypes.D3DVALUE;
  146.   {$EXTERNALSYM D3DVALUE}
  147.   TD3DValue = DXTypes.TD3DValue;
  148.   {$NODEFINE TD3DValue}
  149.   PD3DValue = DXTypes.PD3DValue;
  150.   {$NODEFINE PD3DValue}
  151.  
  152.   D3DFIXED = Longint;
  153.   {$EXTERNALSYM D3DFIXED}
  154.   TD3DFixed = D3DFIXED;
  155.  
  156.   float = TD3DValue;
  157.   {$EXTERNALSYM float}
  158.  
  159.   D3DCOLOR = DXTypes.D3DCOLOR;
  160.   {$EXTERNALSYM D3DCOLOR}
  161.   TD3DColor = DXTypes.TD3DColor;
  162.   {$NODEFINE TD3DColor}
  163.   PD3DColor = DXTypes.PD3DColor;
  164.   {$NODEFINE PD3DColor}
  165.  
  166. function D3DVal(val: Variant): Single;
  167. {$EXTERNALSYM D3DVal}
  168. function D3DDivide(a, b: Double): Single;
  169. {$EXTERNALSYM D3DDivide}
  170. function D3DMultiply(a, b: Double): Single;
  171. {$EXTERNALSYM D3DMultiply}
  172.  
  173. (*
  174.  * Format of CI colors is
  175.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  176.  *  |    alpha      |         color index           |   fraction    |
  177.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  178.  *)
  179.  
  180. // #define CI_GETALPHA(ci)    ((ci) >> 24)
  181. function CI_GETALPHA(ci: DWORD): DWORD;
  182. {$EXTERNALSYM CI_GETALPHA}
  183.  
  184. // #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
  185. function CI_GETINDEX(ci: DWORD): DWORD;
  186. {$EXTERNALSYM CI_GETINDEX}
  187.  
  188. // #define CI_GETFRACTION(ci) ((ci) & 0xff)
  189. function CI_GETFRACTION(ci: DWORD): DWORD;
  190. {$EXTERNALSYM CI_GETFRACTION}
  191.  
  192. // #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
  193. function CI_ROUNDINDEX(ci: DWORD): DWORD;
  194. {$EXTERNALSYM CI_ROUNDINDEX}
  195.  
  196. // #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
  197. function CI_MASKALPHA(ci: DWORD): DWORD;
  198. {$EXTERNALSYM CI_MASKALPHA}
  199.  
  200. // #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
  201. function CI_MAKE(a,i,f: DWORD): DWORD;
  202. {$EXTERNALSYM CI_MAKE}
  203.  
  204. (*
  205.  * Format of RGBA colors is
  206.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  207.  *  |    alpha      |      red      |     green     |     blue      |
  208.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  209.  *)
  210.  
  211. // #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
  212. function RGBA_GETALPHA(rgb: TD3DColor): DWORD;
  213. {$EXTERNALSYM RGBA_GETALPHA}
  214.  
  215. // #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
  216. function RGBA_GETRED(rgb: TD3DColor): DWORD;
  217. {$EXTERNALSYM RGBA_GETRED}
  218.  
  219. // #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
  220. function RGBA_GETGREEN(rgb: TD3DColor): DWORD;
  221. {$EXTERNALSYM RGBA_GETGREEN}
  222.  
  223. // #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
  224. function RGBA_GETBLUE(rgb: TD3DColor): DWORD;
  225. {$EXTERNALSYM RGBA_GETBLUE}
  226.  
  227. // #define RGBA_MAKE(r, g, b, a)   ((TD3DColor) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
  228. function RGBA_MAKE(r, g, b, a: DWORD): TD3DColor;
  229. {$EXTERNALSYM RGBA_MAKE}
  230.  
  231. (* D3DRGB and D3DRGBA may be used as initialisers for D3DCOLORs
  232.  * The float values must be in the range 0..1
  233.  *)
  234.  
  235. // #define D3DRGB(r, g, b) \
  236. //     (0xff000000L | (((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
  237. function D3DRGB(r, g, b: Single): TD3DColor;
  238. {$EXTERNALSYM D3DRGB}
  239.  
  240. // #define D3DRGBA(r, g, b, a) \
  241. //     (  (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
  242. //     |   (((long)((g) * 255)) << 8) | (long)((b) * 255) \
  243. //    )
  244. function D3DRGBA(r, g, b, a: Single): TD3DColor;
  245. {$EXTERNALSYM D3DRGBA}
  246.  
  247. (*
  248.  * Format of RGB colors is
  249.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  250.  *  |    ignored    |      red      |     green     |     blue      |
  251.  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  252.  *)
  253.  
  254. // #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
  255. function RGB_GETRED(rgb: TD3DColor): DWORD;
  256. {$EXTERNALSYM RGB_GETRED}
  257.  
  258. // #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
  259. function RGB_GETGREEN(rgb: TD3DColor): DWORD;
  260. {$EXTERNALSYM RGB_GETGREEN}
  261.  
  262. // #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
  263. function RGB_GETBLUE(rgb: TD3DColor): DWORD;
  264. {$EXTERNALSYM RGB_GETBLUE}
  265.  
  266. // #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
  267. function RGBA_SETALPHA(rgba: TD3DColor; x: DWORD): TD3DColor;
  268. {$EXTERNALSYM RGBA_SETALPHA}
  269.  
  270. // #define RGB_MAKE(r, g, b)       ((TD3DColor) (((r) << 16) | ((g) << 8) | (b)))
  271. function RGB_MAKE(r, g, b: DWORD): TD3DColor;
  272. {$EXTERNALSYM RGB_MAKE}
  273.  
  274. // #define RGBA_TORGB(rgba)       ((TD3DColor) ((rgba) & 0xffffff))
  275. function RGBA_TORGB(rgba: TD3DColor): TD3DColor;
  276. {$EXTERNALSYM RGBA_TORGB}
  277.  
  278. // #define RGB_TORGBA(rgb)        ((TD3DColor) ((rgb) | 0xff000000))
  279. function RGB_TORGBA(rgb: TD3DColor): TD3DColor;
  280. {$EXTERNALSYM RGB_TORGBA}
  281.  
  282. (*
  283.  * Flags for Enumerate functions
  284.  *)
  285. const
  286.  
  287. (*
  288.  * Stop the enumeration
  289.  *)
  290.  
  291.   D3DENUMRET_CANCEL                        = DDENUMRET_CANCEL;
  292.   {$EXTERNALSYM D3DENUMRET_CANCEL}
  293.  
  294. (*
  295.  * Continue the enumeration
  296.  *)
  297.  
  298.   D3DENUMRET_OK                            = DDENUMRET_OK;
  299.   {$EXTERNALSYM D3DENUMRET_OK}
  300.  
  301. type
  302.   TD3DValidateCallback = function (lpUserArg: Pointer;
  303.       dwOffset: DWORD): HResult; stdcall;
  304.   {$NODEFINE TD3DValidateCallback}
  305.   {$HPPEMIT 'typedef LPD3DVALIDATECALLBACK TD3DValidateCallback;'}
  306.  
  307.   TD3DEnumTextureFormatsCallback = function (var lpDdsd: TDDSurfaceDesc;
  308.       lpContext: Pointer): HResult; stdcall;
  309.   {$NODEFINE TD3DEnumTextureFormatsCallback}
  310.   {$HPPEMIT 'typedef LPD3DENUMTEXTUREFORMATSCALLBACK TD3DEnumTextureFormatsCallback;'}
  311.  
  312.   TD3DEnumPixelFormatsCallback = function (var lpDDPixFmt: TDDPixelFormat;
  313.       lpContext: Pointer): HResult; stdcall;
  314.   {$NODEFINE TD3DEnumPixelFormatsCallback}
  315.   {$HPPEMIT 'typedef LPD3DENUMPIXELFORMATSCALLBACK TD3DEnumPixelFormatsCallback;'}
  316.  
  317.   PD3DMaterialHandle = ^TD3DMaterialHandle;
  318.   TD3DMaterialHandle = DWORD;
  319.  
  320.   PD3DTextureHandle = ^TD3DTextureHandle;
  321.   TD3DTextureHandle = DWORD;
  322.  
  323.   PD3DMatrixHandle = ^TD3DMatrixHandle;
  324.   TD3DMatrixHandle = DWORD;
  325.  
  326.  
  327.   PD3DColorValue = ^TD3DColorValue;
  328.   _D3DCOLORVALUE = packed record
  329.     case Integer of
  330.     0: (
  331.       r: TD3DValue;
  332.       g: TD3DValue;
  333.       b: TD3DValue;
  334.       a: TD3DValue;
  335.      );
  336.     1: (
  337.       dvR: TD3DValue;
  338.       dvG: TD3DValue;
  339.       dvB: TD3DValue;
  340.       dvA: TD3DValue;
  341.      );
  342.   end {_D3DCOLORVALUE};
  343.   {$EXTERNALSYM _D3DCOLORVALUE}
  344.   D3DCOLORVALUE = _D3DCOLORVALUE;
  345.   {$EXTERNALSYM D3DCOLORVALUE}
  346.   TD3DColorValue = _D3DCOLORVALUE;
  347.  
  348.  
  349.   PD3DRect = ^TD3DRect;
  350.   _D3DRECT = packed record
  351.     case Integer of
  352.     0: (
  353.       x1: LongInt;
  354.       y1: LongInt;
  355.       x2: LongInt;
  356.       y2: LongInt;
  357.      );
  358.     1: (
  359.       lX1: LongInt;
  360.       lY1: LongInt;
  361.       lX2: LongInt;
  362.       lY2: LongInt;
  363.      );
  364.      2: (
  365.        a: array[0..3] of LongInt;
  366.      );
  367.   end {_D3DRECT};
  368.   {$EXTERNALSYM _D3DRECT}
  369.   D3DRECT = _D3DRECT;
  370.   {$EXTERNALSYM D3DRECT}
  371.   TD3DRect = _D3DRECT;
  372.  
  373.  
  374.   PD3DVector = ^TD3DVector;
  375.   _D3DVECTOR = packed record
  376.     case Integer of
  377.     0: (
  378.       x: TD3DValue;
  379.       y: TD3DValue;
  380.       z: TD3DValue;
  381.      );
  382.     1: (
  383.       dvX: TD3DValue;
  384.       dvY: TD3DValue;
  385.       dvZ: TD3DValue;
  386.      );
  387.   end {_D3DVECTOR};
  388.   {$EXTERNALSYM _D3DVECTOR}
  389.   D3DVECTOR = _D3DVECTOR;
  390.   {$EXTERNALSYM D3DVECTOR}
  391.   TD3DVector = _D3DVECTOR;
  392.  
  393. {$HPPEMIT ''}
  394. {$HPPEMIT '#ifndef DX_SHARED_DEFINES_BCB'}
  395. {$HPPEMIT ''}
  396. {$HPPEMIT 'typedef D3DVALUE TD3DValue;'}
  397. {$HPPEMIT 'typedef D3DVALUE *PD3DValue;'}
  398. {$HPPEMIT ''}
  399. {$HPPEMIT '#ifndef D3DCOLOR_DEFINED_BCB'}
  400. {$HPPEMIT 'typedef D3DCOLOR TD3DColor;'}
  401. {$HPPEMIT 'typedef D3DCOLOR *PD3DColor;'}
  402. {$HPPEMIT '#define D3DCOLOR_DEFINED_BCB'}
  403. {$HPPEMIT '#endif'}
  404. {$HPPEMIT ''}
  405. {$HPPEMIT '#define D3DVECTOR_DEFINED_BCB'}
  406. {$HPPEMIT ''}
  407. {$HPPEMIT '#define DX_SHARED_DEFINES_BCB'}
  408. {$HPPEMIT '#endif // DX_SHARED_DEFINES_BCB'}
  409. {$HPPEMIT ''}
  410.  
  411.  
  412. (******************************************************************
  413.  *                                                                *
  414.  *   D3DVec.inl                                                   *
  415.  *                                                                *
  416.  *   float-valued 3D vector class for Direct3D.                   *
  417.  *                                                                *
  418.  *   Copyright (c) 1996-1998 Microsoft Corp. All rights reserved. *
  419.  *                                                                *
  420.  ******************************************************************)
  421.  
  422.     // Addition and subtraction
  423.   function VectorAdd(const v1, v2: TD3DVector): TD3DVector;
  424.   function VectorSub(const v1, v2: TD3DVector): TD3DVector;
  425.     // Scalar multiplication and division
  426.   function VectorMulS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  427.   function VectorDivS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  428.     // Memberwise multiplication and division
  429.   function VectorMul(const v1, v2: TD3DVector): TD3DVector;
  430.   function VectorDiv(const v1, v2: TD3DVector): TD3DVector;
  431.     // Vector dominance
  432.   function VectorSmaller(v1, v2: TD3DVector): Boolean;
  433.   function VectorSmallerEqual(v1, v2: TD3DVector): Boolean;
  434.     // Bitwise equality
  435.   function VectorEqual(v1, v2: TD3DVector): Boolean;
  436.     // Length-related functions
  437.   function VectorSquareMagnitude(v: TD3DVector): TD3DValue;
  438.   function VectorMagnitude(v: TD3DVector): TD3DValue;
  439.     // Returns vector with same direction and unit length
  440.   function VectorNormalize(const v: TD3DVector): TD3DVector;
  441.     // Return min/max component of the input vector
  442.   function VectorMin(v: TD3DVector): TD3DValue;
  443.   function VectorMax(v: TD3DVector): TD3DValue;
  444.     // Return memberwise min/max of input vectors
  445.   function VectorMinimize(const v1, v2: TD3DVector): TD3DVector;
  446.   function VectorMaximize(const v1, v2: TD3DVector): TD3DVector;
  447.     // Dot and cross product
  448.   function VectorDotProduct(v1, v2: TD3DVector): TD3DValue;
  449.   function VectorCrossProduct(const v1, v2: TD3DVector): TD3DVector;
  450.  
  451. type
  452. (*
  453.  * Vertex data types supported in an ExecuteBuffer.
  454.  *)
  455.  
  456. (*
  457.  * Homogeneous vertices
  458.  *)
  459.  
  460.   PD3DHVertex = ^TD3DHVertex;
  461.   _D3DHVERTEX = packed record
  462.     dwFlags: DWORD;        (* Homogeneous clipping flags *)
  463.     case Integer of
  464.     0: (
  465.       hx: TD3DValue;
  466.       hy: TD3DValue;
  467.       hz: TD3DValue;
  468.      );
  469.     1: (
  470.       dvHX: TD3DValue;
  471.       dvHY: TD3DValue;
  472.       dvHZ: TD3DValue;
  473.      );
  474.   end;
  475.   {$EXTERNALSYM _D3DHVERTEX}
  476.   D3DHVERTEX = _D3DHVERTEX;
  477.   {$EXTERNALSYM D3DHVERTEX}
  478.   TD3DHVertex = _D3DHVERTEX;
  479.  
  480.  
  481. (*
  482.  * Transformed/lit vertices
  483.  *)
  484.  
  485.   PD3DTLVertex = ^TD3DTLVertex;
  486.   _D3DTLVERTEX = packed record
  487.     case Integer of
  488.     0: (
  489.       sx: TD3DValue;             (* Screen coordinates *)
  490.       sy: TD3DValue;
  491.       sz: TD3DValue;
  492.       rhw: TD3DValue;            (* Reciprocal of homogeneous w *)
  493.       color: TD3DColor;          (* Vertex color *)
  494.       specular: TD3DColor;       (* Specular component of vertex *)
  495.       tu: TD3DValue;             (* Texture coordinates *)
  496.       tv: TD3DValue;
  497.      );
  498.     1: (
  499.       dvSX: TD3DValue;
  500.       dvSY: TD3DValue;
  501.       dvSZ: TD3DValue;
  502.       dvRHW: TD3DValue;
  503.       dcColor: TD3DColor;
  504.       dcSpecular: TD3DColor;
  505.       dvTU: TD3DValue;
  506.       dvTV: TD3DValue;
  507.      );
  508.   end;
  509.   {$EXTERNALSYM _D3DTLVERTEX}
  510.   D3DTLVERTEX = _D3DTLVERTEX;
  511.   {$EXTERNALSYM D3DTLVERTEX}
  512.   TD3DTLVertex = _D3DTLVERTEX;
  513.  
  514. (*
  515.  * Untransformed/lit vertices
  516.  *)
  517.  
  518.   PD3DLVertex = ^TD3DLVertex;
  519.   _D3DLVERTEX = packed record
  520.     case Integer of
  521.     0: (
  522.       x: TD3DValue;             (* Homogeneous coordinates *)
  523.       y: TD3DValue;
  524.       z: TD3DValue;
  525.       dwReserved: DWORD;
  526.       color: TD3DColor;         (* Vertex color *)
  527.       specular: TD3DColor;      (* Specular component of vertex *)
  528.       tu: TD3DValue;            (* Texture coordinates *)
  529.       tv: TD3DValue;
  530.      );
  531.     1: (
  532.       dvX: TD3DValue;
  533.       dvY: TD3DValue;
  534.       dvZ: TD3DValue;
  535.       UNIONFILLER1d: DWORD;
  536.       dcColor: TD3DColor;
  537.       dcSpecular: TD3DColor;
  538.       dvTU: TD3DValue;
  539.       dvTV: TD3DValue;
  540.      );
  541.   end;
  542.   {$EXTERNALSYM _D3DLVERTEX}
  543.   D3DLVERTEX = _D3DLVERTEX;
  544.   {$EXTERNALSYM D3DLVERTEX}
  545.   TD3DLVertex = _D3DLVERTEX;
  546.  
  547.  
  548. (*
  549.  * Untransformed/unlit vertices
  550.  *)
  551.  
  552.   PD3DVertex = ^TD3DVertex;
  553.   _D3DVERTEX = packed record
  554.     case Integer of
  555.     0: (
  556.       x: TD3DValue;             (* Homogeneous coordinates *)
  557.       y: TD3DValue;
  558.       z: TD3DValue;
  559.       nx: TD3DValue;            (* Normal *)
  560.       ny: TD3DValue;
  561.       nz: TD3DValue;
  562.       tu: TD3DValue;            (* Texture coordinates *)
  563.       tv: TD3DValue;
  564.      );
  565.     1: (
  566.       dvX: TD3DValue;
  567.       dvY: TD3DValue;
  568.       dvZ: TD3DValue;
  569.       dvNX: TD3DValue;
  570.       dvNY: TD3DValue;
  571.       dvNZ: TD3DValue;
  572.       dvTU: TD3DValue;
  573.       dvTV: TD3DValue;
  574.      );
  575.   end;
  576.   {$EXTERNALSYM _D3DVERTEX}
  577.   D3DVERTEX = _D3DVERTEX;
  578.   {$EXTERNALSYM D3DVERTEX}
  579.   TD3DVertex = _D3DVERTEX;
  580.  
  581. (*
  582.  * Matrix, viewport, and tranformation structures and definitions.
  583.  *)
  584.  
  585.   PD3DMatrix = ^TD3DMatrix;
  586.   _D3DMATRIX = packed record
  587.     case integer of
  588.       0 : (_11, _12, _13, _14: TD3DValue;
  589.            _21, _22, _23, _24: TD3DValue;
  590.            _31, _32, _33, _34: TD3DValue;
  591.            _41, _42, _43, _44: TD3DValue);
  592.       1 : (m : array [0..3, 0..3] of TD3DValue);
  593.   end {_D3DMATRIX};
  594.   {$EXTERNALSYM _D3DMATRIX}
  595.   D3DMATRIX = _D3DMATRIX;
  596.   {$EXTERNALSYM D3DMATRIX}
  597.   TD3DMatrix = _D3DMATRIX;
  598.  
  599.   PD3DViewport = ^TD3DViewport;
  600.   _D3DVIEWPORT = packed record
  601.     dwSize: DWORD;
  602.     dwX: DWORD;
  603.     dwY: DWORD;                (* Top left *)
  604.     dwWidth: DWORD;
  605.     dwHeight: DWORD;           (* Dimensions *)
  606.     dvScaleX: TD3DValue;       (* Scale homogeneous to screen *)
  607.     dvScaleY: TD3DValue;       (* Scale homogeneous to screen *)
  608.     dvMaxX: TD3DValue;         (* Min/max homogeneous x coord *)
  609.     dvMaxY: TD3DValue;         (* Min/max homogeneous y coord *)
  610.     dvMinZ: TD3DValue;
  611.     dvMaxZ: TD3DValue;         (* Min/max homogeneous z coord *)
  612.   end {_D3DVIEWPORT};
  613.   {$EXTERNALSYM _D3DVIEWPORT}
  614.   D3DVIEWPORT = _D3DVIEWPORT;
  615.   {$EXTERNALSYM D3DVIEWPORT}
  616.   TD3DViewport = _D3DVIEWPORT;
  617.  
  618.  
  619. {$IFDEF DIRECT3D_VERSION_5}
  620.   PD3DViewport2 = ^TD3DViewport2;
  621.   _D3DVIEWPORT2 = packed record
  622.     dwSize: DWORD;
  623.     dwX: DWORD;
  624.     dwY: DWORD;                (* Viewport Top left *)
  625.     dwWidth: DWORD;
  626.     dwHeight: DWORD;           (* Viewport Dimensions *)
  627.     dvClipX: TD3DValue;           (* Top left of clip volume *)
  628.     dvClipY: TD3DValue;
  629.     dvClipWidth: TD3DValue;    (* Clip Volume Dimensions *)
  630.     dvClipHeight: TD3DValue;
  631.     dvMinZ: TD3DValue;         (* Min/max of clip Volume *)
  632.     dvMaxZ: TD3DValue;
  633.   end;
  634.   {$EXTERNALSYM _D3DVIEWPORT2}
  635.   D3DVIEWPORT2 = _D3DVIEWPORT2;
  636.   {$EXTERNALSYM D3DVIEWPORT2}
  637.   TD3DViewport2 = _D3DVIEWPORT2;
  638. {$ENDIF} // DIRECT3D_VERSION_5
  639.  
  640.  
  641. {$IFDEF DIRECT3D_VERSION_7}
  642.   PD3DViewport7 = ^TD3DViewport7;
  643.   _D3DVIEWPORT7 = packed record
  644.     dwX: DWORD;
  645.     dwY: DWORD;                (* Viewport Top left *)
  646.     dwWidth: DWORD;
  647.     dwHeight: DWORD;           (* Viewport Dimensions *)
  648.     dvMinZ: TD3DValue;         (* Min/max of clip Volume *)
  649.     dvMaxZ: TD3DValue;
  650.   end;
  651.   {$EXTERNALSYM _D3DVIEWPORT7}
  652.   D3DVIEWPORT7 = _D3DVIEWPORT7;
  653.   {$EXTERNALSYM D3DVIEWPORT7}
  654.   TD3DViewport7 = _D3DVIEWPORT7;
  655. {$ENDIF} // DIRECT3D_VERSION_7
  656.  
  657. (*
  658.  * Values for clip fields.
  659.  *)
  660.  
  661. {$IFDEF DIRECT3D_VERSION_7}
  662.  
  663. const
  664. // Max number of user clipping planes, supported in D3D.
  665.   D3DMAXUSERCLIPPLANES  = 32;
  666.   {$EXTERNALSYM D3DMAXUSERCLIPPLANES}
  667.  
  668. // These bits could be ORed together to use with D3DRENDERSTATE_CLIPPLANEENABLE
  669. //
  670.   D3DCLIPPLANE0 = (1 shl 0);
  671.   {$EXTERNALSYM D3DCLIPPLANE0}
  672.   D3DCLIPPLANE1 = (1 shl 1);
  673.   {$EXTERNALSYM D3DCLIPPLANE1}
  674.   D3DCLIPPLANE2 = (1 shl 2);
  675.   {$EXTERNALSYM D3DCLIPPLANE2}
  676.   D3DCLIPPLANE3 = (1 shl 3);
  677.   {$EXTERNALSYM D3DCLIPPLANE3}
  678.   D3DCLIPPLANE4 = (1 shl 4);
  679.   {$EXTERNALSYM D3DCLIPPLANE4}
  680.   D3DCLIPPLANE5 = (1 shl 5);
  681.   {$EXTERNALSYM D3DCLIPPLANE5}
  682.  
  683. {$ENDIF} // DIRECT3D_VERSION_7
  684.  
  685. const
  686.   D3DCLIP_LEFT                            = $00000001;
  687.   {$EXTERNALSYM D3DCLIP_LEFT}
  688.   D3DCLIP_RIGHT                           = $00000002;
  689.   {$EXTERNALSYM D3DCLIP_RIGHT}
  690.   D3DCLIP_TOP                             = $00000004;
  691.   {$EXTERNALSYM D3DCLIP_TOP}
  692.   D3DCLIP_BOTTOM                          = $00000008;
  693.   {$EXTERNALSYM D3DCLIP_BOTTOM}
  694.   D3DCLIP_FRONT                           = $00000010;
  695.   {$EXTERNALSYM D3DCLIP_FRONT}
  696.   D3DCLIP_BACK                            = $00000020;
  697.   {$EXTERNALSYM D3DCLIP_BACK}
  698.   D3DCLIP_GEN0                            = $00000040;
  699.   {$EXTERNALSYM D3DCLIP_GEN0}
  700.   D3DCLIP_GEN1                            = $00000080;
  701.   {$EXTERNALSYM D3DCLIP_GEN1}
  702.   D3DCLIP_GEN2                            = $00000100;
  703.   {$EXTERNALSYM D3DCLIP_GEN2}
  704.   D3DCLIP_GEN3                            = $00000200;
  705.   {$EXTERNALSYM D3DCLIP_GEN3}
  706.   D3DCLIP_GEN4                            = $00000400;
  707.   {$EXTERNALSYM D3DCLIP_GEN4}
  708.   D3DCLIP_GEN5                            = $00000800;
  709.   {$EXTERNALSYM D3DCLIP_GEN5}
  710.  
  711. (*
  712.  * Values for d3d status.
  713.  *)
  714.  
  715.   D3DSTATUS_CLIPUNIONLEFT                 = D3DCLIP_LEFT;
  716.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONLEFT}
  717.   D3DSTATUS_CLIPUNIONRIGHT                = D3DCLIP_RIGHT;
  718.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONRIGHT}
  719.   D3DSTATUS_CLIPUNIONTOP                  = D3DCLIP_TOP;
  720.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONTOP}
  721.   D3DSTATUS_CLIPUNIONBOTTOM               = D3DCLIP_BOTTOM;
  722.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONBOTTOM}
  723.   D3DSTATUS_CLIPUNIONFRONT                = D3DCLIP_FRONT;
  724.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONFRONT}
  725.   D3DSTATUS_CLIPUNIONBACK                 = D3DCLIP_BACK;
  726.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONBACK}
  727.   D3DSTATUS_CLIPUNIONGEN0                 = D3DCLIP_GEN0;
  728.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN0}
  729.   D3DSTATUS_CLIPUNIONGEN1                 = D3DCLIP_GEN1;
  730.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN1}
  731.   D3DSTATUS_CLIPUNIONGEN2                 = D3DCLIP_GEN2;
  732.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN2}
  733.   D3DSTATUS_CLIPUNIONGEN3                 = D3DCLIP_GEN3;
  734.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN3}
  735.   D3DSTATUS_CLIPUNIONGEN4                 = D3DCLIP_GEN4;
  736.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN4}
  737.   D3DSTATUS_CLIPUNIONGEN5                 = D3DCLIP_GEN5;
  738.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONGEN5}
  739.  
  740.   D3DSTATUS_CLIPINTERSECTIONLEFT          = $00001000;
  741.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONLEFT}
  742.   D3DSTATUS_CLIPINTERSECTIONRIGHT         = $00002000;
  743.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONRIGHT}
  744.   D3DSTATUS_CLIPINTERSECTIONTOP           = $00004000;
  745.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONTOP}
  746.   D3DSTATUS_CLIPINTERSECTIONBOTTOM        = $00008000;
  747.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONBOTTOM}
  748.   D3DSTATUS_CLIPINTERSECTIONFRONT         = $00010000;
  749.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONFRONT}
  750.   D3DSTATUS_CLIPINTERSECTIONBACK          = $00020000;
  751.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONBACK}
  752.   D3DSTATUS_CLIPINTERSECTIONGEN0          = $00040000;
  753.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN0}
  754.   D3DSTATUS_CLIPINTERSECTIONGEN1          = $00080000;
  755.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN1}
  756.   D3DSTATUS_CLIPINTERSECTIONGEN2          = $00100000;
  757.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN2}
  758.   D3DSTATUS_CLIPINTERSECTIONGEN3          = $00200000;
  759.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN3}
  760.   D3DSTATUS_CLIPINTERSECTIONGEN4          = $00400000;
  761.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN4}
  762.   D3DSTATUS_CLIPINTERSECTIONGEN5          = $00800000;
  763.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONGEN5}
  764.   D3DSTATUS_ZNOTVISIBLE                   = $01000000;
  765.   {$EXTERNALSYM D3DSTATUS_ZNOTVISIBLE}
  766. (* Do not use 0x80000000 for any status flags in future as it is reserved *)
  767.  
  768.   D3DSTATUS_CLIPUNIONALL = (
  769.             D3DSTATUS_CLIPUNIONLEFT or
  770.             D3DSTATUS_CLIPUNIONRIGHT or
  771.             D3DSTATUS_CLIPUNIONTOP or
  772.             D3DSTATUS_CLIPUNIONBOTTOM or
  773.             D3DSTATUS_CLIPUNIONFRONT or
  774.             D3DSTATUS_CLIPUNIONBACK or
  775.             D3DSTATUS_CLIPUNIONGEN0 or
  776.             D3DSTATUS_CLIPUNIONGEN1 or
  777.             D3DSTATUS_CLIPUNIONGEN2 or
  778.             D3DSTATUS_CLIPUNIONGEN3 or
  779.             D3DSTATUS_CLIPUNIONGEN4 or
  780.             D3DSTATUS_CLIPUNIONGEN5);
  781.   {$EXTERNALSYM D3DSTATUS_CLIPUNIONALL}
  782.  
  783.   D3DSTATUS_CLIPINTERSECTIONALL = (
  784.             D3DSTATUS_CLIPINTERSECTIONLEFT or
  785.             D3DSTATUS_CLIPINTERSECTIONRIGHT or
  786.             D3DSTATUS_CLIPINTERSECTIONTOP or
  787.             D3DSTATUS_CLIPINTERSECTIONBOTTOM or
  788.             D3DSTATUS_CLIPINTERSECTIONFRONT or
  789.             D3DSTATUS_CLIPINTERSECTIONBACK or
  790.             D3DSTATUS_CLIPINTERSECTIONGEN0 or
  791.             D3DSTATUS_CLIPINTERSECTIONGEN1 or
  792.             D3DSTATUS_CLIPINTERSECTIONGEN2 or
  793.             D3DSTATUS_CLIPINTERSECTIONGEN3 or
  794.             D3DSTATUS_CLIPINTERSECTIONGEN4 or
  795.             D3DSTATUS_CLIPINTERSECTIONGEN5);
  796.   {$EXTERNALSYM D3DSTATUS_CLIPINTERSECTIONALL}
  797.  
  798.   D3DSTATUS_DEFAULT = (
  799.             D3DSTATUS_CLIPINTERSECTIONALL or
  800.             D3DSTATUS_ZNOTVISIBLE);
  801.   {$EXTERNALSYM D3DSTATUS_DEFAULT}
  802.  
  803. (*
  804.  * Options for direct transform calls
  805.  *)
  806.  
  807.   D3DTRANSFORM_CLIPPED       = $00000001;
  808.   {$EXTERNALSYM D3DTRANSFORM_CLIPPED}
  809.   D3DTRANSFORM_UNCLIPPED     = $00000002;
  810.   {$EXTERNALSYM D3DTRANSFORM_UNCLIPPED}
  811.  
  812. type
  813.   PD3DTransformData = ^TD3DTransformData;
  814.   _D3DTRANSFORMDATA = packed record
  815.     dwSize: DWORD;
  816.     lpIn: Pointer;             (* Input vertices *)
  817.     dwInSize: DWORD;           (* Stride of input vertices *)
  818.     lpOut: Pointer;            (* Output vertices *)
  819.     dwOutSize: DWORD;          (* Stride of output vertices *)
  820.     lpHOut: ^TD3DHVertex;      (* Output homogeneous vertices *)
  821.     dwClip: DWORD;             (* Clipping hint *)
  822.     dwClipIntersection: DWORD;
  823.     dwClipUnion: DWORD;        (* Union of all clip flags *)
  824.     drExtent: TD3DRect;        (* Extent of transformed vertices *)
  825.   end;
  826.   {$EXTERNALSYM _D3DTRANSFORMDATA}
  827.   D3DTRANSFORMDATA = _D3DTRANSFORMDATA;
  828.   {$EXTERNALSYM D3DTRANSFORMDATA}
  829.   TD3DTransformData = _D3DTRANSFORMDATA;
  830.  
  831. (*
  832.  * Structure defining position and direction properties for lighting.
  833.  *)
  834.  
  835.   PD3DLightingElement = ^TD3DLightingElement;
  836.   _D3DLIGHTINGELEMENT = packed record
  837.     dvPosition: TD3DVector;           (* Lightable point in model space *)
  838.     dvNormal: TD3DVector;             (* Normalised unit vector *)
  839.   end;
  840.   {$EXTERNALSYM _D3DLIGHTINGELEMENT}
  841.   D3DLIGHTINGELEMENT = _D3DLIGHTINGELEMENT;
  842.   {$EXTERNALSYM D3DLIGHTINGELEMENT}
  843.   TD3DLightingElement = _D3DLIGHTINGELEMENT;
  844.  
  845. (*
  846.  * Structure defining material properties for lighting.
  847.  *)
  848.  
  849.   PD3DMaterial = ^TD3DMaterial;
  850.   _D3DMATERIAL = packed record
  851.     dwSize: DWORD;
  852.     case Integer of
  853.     0: (
  854.       diffuse: TD3DColorValue;        (* Diffuse color RGBA *)
  855.       ambient: TD3DColorValue;        (* Ambient color RGB *)
  856.       specular: TD3DColorValue;       (* Specular 'shininess' *)
  857.       emissive: TD3DColorValue;       (* Emissive color RGB *)
  858.       power: TD3DValue;               (* Sharpness if specular highlight *)
  859.       hTexture: TD3DTextureHandle;    (* Handle to texture map *)
  860.       dwRampSize: DWORD;
  861.      );
  862.     1: (
  863.       dcvDiffuse: TD3DColorValue;
  864.       dcvAmbient: TD3DColorValue;
  865.       dcvSpecular: TD3DColorValue;
  866.       dcvEmissive: TD3DColorValue;
  867.       dvPower: TD3DValue;
  868.      );
  869.   end;
  870.   {$EXTERNALSYM _D3DMATERIAL}
  871.   D3DMATERIAL = _D3DMATERIAL;
  872.   {$EXTERNALSYM D3DMATERIAL}
  873.   TD3DMaterial = _D3DMATERIAL;
  874.  
  875. {$IFDEF DIRECT3D_VERSION_7}
  876.  
  877.   PD3DMaterial7 = ^TD3DMaterial7;
  878.   _D3DMATERIAL7 = packed record
  879.     case Integer of
  880.     0: (
  881.       diffuse: TD3DColorValue;        (* Diffuse color RGBA *)
  882.       ambient: TD3DColorValue;        (* Ambient color RGB *)
  883.       specular: TD3DColorValue;       (* Specular 'shininess' *)
  884.       emissive: TD3DColorValue;       (* Emissive color RGB *)
  885.       power: TD3DValue;               (* Sharpness if specular highlight *)
  886.      );
  887.     1: (
  888.       dcvDiffuse: TD3DColorValue;
  889.       dcvAmbient: TD3DColorValue;
  890.       dcvSpecular: TD3DColorValue;
  891.       dcvEmissive: TD3DColorValue;
  892.       dvPower: TD3DValue;
  893.      );
  894.   end;
  895.   {$EXTERNALSYM _D3DMATERIAL7}
  896.   D3DMATERIAL7 = _D3DMATERIAL7;
  897.   {$EXTERNALSYM D3DMATERIAL7}
  898.   TD3DMaterial7 = _D3DMATERIAL7;
  899.  
  900. {$ENDIF} // DIRECT3D_VERSION_7
  901.  
  902. {$IFDEF DIRECT3D_VERSION_LESS_8}
  903.  
  904.   PD3DLightType = ^TD3DLightType;
  905.   _D3DLIGHTTYPE = (
  906.     D3DLIGHT_INVALID_0,
  907.     D3DLIGHT_POINT,
  908.     D3DLIGHT_SPOT,
  909.     D3DLIGHT_DIRECTIONAL,
  910. // Note: The following light type (D3DLIGHT_PARALLELPOINT)
  911. // is no longer supported from D3D for DX7 onwards.
  912.     D3DLIGHT_PARALLELPOINT
  913. {$IFDEF DIRECT3D_VERSION_LESS_5}, // For backward compatible headers
  914.     D3DLIGHT_GLSPOT
  915. {$ENDIF} // DIRECT3D_VERSION_LESS_5
  916.   );
  917.   {$EXTERNALSYM _D3DLIGHTTYPE}
  918.   D3DLIGHTTYPE = _D3DLIGHTTYPE;
  919.   {$EXTERNALSYM D3DLIGHTTYPE}
  920.   TD3DLightType = _D3DLIGHTTYPE;
  921.  
  922. {$ELSE}
  923. const
  924.   D3DLIGHT_PARALLELPOINT  = TD3DLightType(4);
  925.   {$EXTERNALSYM D3DLIGHT_PARALLELPOINT}
  926.   D3DLIGHT_GLSPOT         = TD3DLightType(5);
  927.   {$EXTERNALSYM D3DLIGHT_GLSPOT}
  928.  
  929. type
  930. {$ENDIF} //(DIRECT3D_VERSION < 0x0800)
  931.  
  932. (*
  933.  * Structure defining a light source and its properties.
  934.  *)
  935.  
  936.   PD3DLight = ^TD3DLight;
  937.   _D3DLIGHT = packed record
  938.     dwSize: DWORD;
  939.     dltType: TD3DLightType;     (* Type of light source *)
  940.     dcvColor: TD3DColorValue;   (* Color of light *)
  941.     dvPosition: TD3DVector;     (* Position in world space *)
  942.     dvDirection: TD3DVector;    (* Direction in world space *)
  943.     dvRange: TD3DValue;         (* Cutoff range *)
  944.     dvFalloff: TD3DValue;       (* Falloff *)
  945.     dvAttenuation0: TD3DValue;  (* Constant attenuation *)
  946.     dvAttenuation1: TD3DValue;  (* Linear attenuation *)
  947.     dvAttenuation2: TD3DValue;  (* Quadratic attenuation *)
  948.     dvTheta: TD3DValue;         (* Inner angle of spotlight cone *)
  949.     dvPhi: TD3DValue;           (* Outer angle of spotlight cone *)
  950.   end;
  951.   {$EXTERNALSYM _D3DLIGHT}
  952.   D3DLIGHT = _D3DLIGHT;
  953.   {$EXTERNALSYM D3DLIGHT}
  954.   TD3DLight = _D3DLIGHT;
  955.  
  956. {$IFDEF DIRECT3D_VERSION_7}
  957.  
  958.   PD3DLight7 = ^TD3DLight7;
  959.   _D3DLIGHT7 = packed record
  960.     dltType: TD3DLightType;     (* Type of light source *)
  961.     dcvDiffuse: TD3DColorValue; (* Diffuse color of light *)
  962.     dcvSpecular: TD3DColorValue;(* Specular color of light *)
  963.     dcvAmbient: TD3DColorValue; (* Ambient color of light *)
  964.     dvPosition: TD3DVector;     (* Position in world space *)
  965.     dvDirection: TD3DVector;    (* Direction in world space *)
  966.     dvRange: TD3DValue;         (* Cutoff range *)
  967.     dvFalloff: TD3DValue;       (* Falloff *)
  968.     dvAttenuation0: TD3DValue;  (* Constant attenuation *)
  969.     dvAttenuation1: TD3DValue;  (* Linear attenuation *)
  970.     dvAttenuation2: TD3DValue;  (* Quadratic attenuation *)
  971.     dvTheta: TD3DValue;         (* Inner angle of spotlight cone *)
  972.     dvPhi: TD3DValue;           (* Outer angle of spotlight cone *)
  973.   end;
  974.   {$EXTERNALSYM _D3DLIGHT7}
  975.   D3DLIGHT7 = _D3DLIGHT7;
  976.   {$EXTERNALSYM D3DLIGHT7}
  977.   TD3DLight7 = _D3DLIGHT7;
  978.  
  979. {$ENDIF} // DIRECT3D_VERSION_7
  980.  
  981. {$IFDEF DIRECT3D_VERSION_5}
  982.  
  983. (*
  984.  * Structure defining a light source and its properties.
  985.  *)
  986.  
  987. (* flags bits *)
  988. const
  989.   D3DLIGHT_ACTIVE       = $00000001;
  990.   {$EXTERNALSYM D3DLIGHT_ACTIVE}
  991.   D3DLIGHT_NO_SPECULAR  = $00000002;
  992.   {$EXTERNALSYM D3DLIGHT_NO_SPECULAR}
  993.   D3DLIGHT_ALL = D3DLIGHT_ACTIVE or D3DLIGHT_ACTIVE;
  994.   {$EXTERNALSYM D3DLIGHT_ALL}
  995.  
  996. (* maximum valid light range *)
  997.   D3DLIGHT_RANGE_MAX        = 1.8439088915e+18; //sqrt(FLT_MAX);
  998.   {$EXTERNALSYM D3DLIGHT_RANGE_MAX}
  999.  
  1000. type
  1001.   PD3DLight2 = ^TD3DLight2;
  1002.   _D3DLIGHT2 = packed record
  1003.     dwSize: DWORD;
  1004.     dltType: TD3DLightType;     (* Type of light source *)
  1005.     dcvColor: TD3DColorValue;   (* Color of light *)
  1006.     dvPosition: TD3DVector;     (* Position in world space *)
  1007.     dvDirection: TD3DVector;    (* Direction in world space *)
  1008.     dvRange: TD3DValue;         (* Cutoff range *)
  1009.     dvFalloff: TD3DValue;       (* Falloff *)
  1010.     dvAttenuation0: TD3DValue;  (* Constant attenuation *)
  1011.     dvAttenuation1: TD3DValue;  (* Linear attenuation *)
  1012.     dvAttenuation2: TD3DValue;  (* Quadratic attenuation *)
  1013.     dvTheta: TD3DValue;         (* Inner angle of spotlight cone *)
  1014.     dvPhi: TD3DValue;           (* Outer angle of spotlight cone *)
  1015.     dwFlags: DWORD;
  1016.   end;
  1017.   {$EXTERNALSYM _D3DLIGHT2}
  1018.   D3DLIGHT2 = _D3DLIGHT2;
  1019.   {$EXTERNALSYM D3DLIGHT2}
  1020.   TD3DLight2 = _D3DLIGHT2;
  1021.  
  1022. {$ELSE}
  1023.   PD3DLight2 = PD3DLight;
  1024.   TD3DLight2 = TD3DLight;
  1025.  
  1026. {$ENDIF} // DIRECT3D_VERSION_5
  1027.   PD3DLightData = ^TD3DLightData;
  1028.   _D3DLIGHTDATA = packed record
  1029.     dwSize: DWORD;
  1030.     lpIn: ^TD3DLightingElement; (* Input positions and normals *)
  1031.     dwInSize: DWORD;            (* Stride of input elements *)
  1032.     lpOut: ^TD3DTLVertex;       (* Output colors *)
  1033.     dwOutSize: DWORD;           (* Stride of output colors *)
  1034.   end;
  1035.   {$EXTERNALSYM _D3DLIGHTDATA}
  1036.   D3DLIGHTDATA = _D3DLIGHTDATA;
  1037.   {$EXTERNALSYM D3DLIGHTDATA}
  1038.   TD3DLightData = _D3DLIGHTDATA;
  1039.  
  1040. (*
  1041.  * Before DX5, these values were in an enum called
  1042.  * TD3DColorModel. This was not correct, since they are
  1043.  * bit flags. A driver can surface either or both flags
  1044.  * in the dcmColorModel member of D3DDEVICEDESC.
  1045.  *)
  1046.  
  1047. type
  1048.   TD3DColorModel = DWORD;
  1049.  
  1050. const
  1051.   D3DCOLOR_MONO = 1;
  1052.   {$EXTERNALSYM D3DCOLOR_MONO}
  1053.   D3DCOLOR_RGB  = 2;
  1054.   {$EXTERNALSYM D3DCOLOR_RGB}
  1055.  
  1056. (*
  1057.  * Options for clearing
  1058.  *)
  1059.  
  1060. const
  1061.   D3DCLEAR_TARGET            = $00000001; (* Clear target surface *)
  1062.   {$EXTERNALSYM D3DCLEAR_TARGET}
  1063.   D3DCLEAR_ZBUFFER           = $00000002; (* Clear target z buffer *)
  1064.   {$EXTERNALSYM D3DCLEAR_ZBUFFER}
  1065. {$IFDEF DIRECT3D_VERSION_6}
  1066.   D3DCLEAR_STENCIL           = $00000004; (* Clear stencil planes *)
  1067.   {$EXTERNALSYM D3DCLEAR_STENCIL}
  1068. {$ENDIF} // DIRECT3D_VERSION_6
  1069.  
  1070. (*
  1071.  * Execute buffers are allocated via Direct3D.  These buffers may then
  1072.  * be filled by the application with instructions to execute along with
  1073.  * vertex data.
  1074.  *)
  1075.  
  1076. (*
  1077.  * Supported op codes for execute instructions.
  1078.  *)
  1079.  
  1080. type
  1081.   PD3DOpcode = ^TD3DOpcode;
  1082.   _D3DOPCODE = (
  1083.     D3DOP_INVALID_0,
  1084.     D3DOP_POINT,
  1085.     D3DOP_LINE,
  1086.     D3DOP_TRIANGLE,
  1087.     D3DOP_MATRIXLOAD,
  1088.     D3DOP_MATRIXMULTIPLY,
  1089.     D3DOP_STATETRANSFORM,
  1090.     D3DOP_STATELIGHT,
  1091.     D3DOP_STATERENDER,
  1092.     D3DOP_PROCESSVERTICES,
  1093.     D3DOP_TEXTURELOAD,
  1094.     D3DOP_EXIT,
  1095.     D3DOP_BRANCHFORWARD,
  1096.     D3DOP_SPAN,
  1097.     D3DOP_SETSTATUS);
  1098.   {$EXTERNALSYM _D3DOPCODE}
  1099.   D3DOPCODE = _D3DOPCODE;
  1100.   {$EXTERNALSYM D3DOPCODE}
  1101.   TD3DOpcode = _D3DOPCODE;
  1102.  
  1103.   PD3DInstruction = ^TD3DInstruction;
  1104.   _D3DINSTRUCTION = packed record
  1105.     bOpcode: Byte;   (* Instruction opcode *)
  1106.     bSize: Byte;     (* Size of each instruction data unit *)
  1107.     wCount: Word;    (* Count of instruction data units to follow *)
  1108.   end;
  1109.   {$EXTERNALSYM _D3DINSTRUCTION}
  1110.   D3DINSTRUCTION = _D3DINSTRUCTION;
  1111.   {$EXTERNALSYM D3DINSTRUCTION}
  1112.   TD3DInstruction = _D3DINSTRUCTION;
  1113.  
  1114. (*
  1115.  * Structure for texture loads
  1116.  *)
  1117.  
  1118.   PD3DTextureLoad = ^TD3DTextureLoad;
  1119.   _D3DTEXTURELOAD = packed record
  1120.     hDestTexture: TD3DTextureHandle;
  1121.     hSrcTexture: TD3DTextureHandle;
  1122.   end;
  1123.   {$EXTERNALSYM _D3DTEXTURELOAD}
  1124.   D3DTEXTURELOAD = _D3DTEXTURELOAD;
  1125.   {$EXTERNALSYM D3DTEXTURELOAD}
  1126.   TD3DTextureLoad = _D3DTEXTURELOAD;
  1127.  
  1128. (*
  1129.  * Structure for picking
  1130.  *)
  1131.  
  1132.   PD3DPickRecord = ^TD3DPickRecord;
  1133.   _D3DPICKRECORD = packed record
  1134.     bOpcode: Byte;
  1135.     bPad: Byte;
  1136.     dwOffset: DWORD;
  1137.     dvZ: TD3DValue;
  1138.   end;
  1139.   {$EXTERNALSYM _D3DPICKRECORD}
  1140.   D3DPICKRECORD = _D3DPICKRECORD;
  1141.   {$EXTERNALSYM D3DPICKRECORD}
  1142.   TD3DPickRecord = _D3DPICKRECORD;
  1143.  
  1144. (*
  1145.  * The following defines the rendering states which can be set in the
  1146.  * execute buffer.
  1147.  *)
  1148.  
  1149. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1150.  
  1151.   PD3DShadeMode = ^TD3DShadeMode;
  1152.   _D3DSHADEMODE = (
  1153.     D3DSHADE_INVALID_0,
  1154.     D3DSHADE_FLAT,
  1155.     D3DSHADE_GOURAUD,
  1156.     D3DSHADE_PHONG);
  1157.   {$EXTERNALSYM _D3DSHADEMODE}
  1158.   D3DSHADEMODE = _D3DSHADEMODE;
  1159.   {$EXTERNALSYM D3DSHADEMODE}
  1160.   TD3DShadeMode = _D3DSHADEMODE;
  1161.  
  1162.   PD3DFillMode = ^TD3DFillMode;
  1163.   _D3DFILLMODE = (
  1164.     D3DFILL_INVALID_0,
  1165.     D3DFILL_POINT,
  1166.     D3DFILL_WIREFRAME,
  1167.     D3DFILL_SOLID);
  1168.   {$EXTERNALSYM _D3DFILLMODE}
  1169.   D3DFILLMODE = _D3DFILLMODE;
  1170.   {$EXTERNALSYM D3DFILLMODE}
  1171.   TD3DFillMode = _D3DFILLMODE;
  1172.  
  1173.   PD3DLinePattern = ^TD3DLinePattern;
  1174.   _D3DLINEPATTERN = packed record
  1175.     wRepeatFactor: WORD;
  1176.     wLinePattern: WORD;
  1177.   end;
  1178.   {$EXTERNALSYM _D3DLINEPATTERN}
  1179.   D3DLINEPATTERN = _D3DLINEPATTERN;
  1180.   {$EXTERNALSYM D3DLINEPATTERN}
  1181.   TD3DLinePattern = _D3DLINEPATTERN;
  1182.  
  1183. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1184.  
  1185.   PD3DTextureFilter = ^TD3DTextureFilter;
  1186.   _D3DTEXTUREFILTER = (
  1187.     D3DFILTER_INVALID_0,
  1188.     D3DFILTER_NEAREST,
  1189.     D3DFILTER_LINEAR,
  1190.     D3DFILTER_MIPNEAREST,
  1191.     D3DFILTER_MIPLINEAR,
  1192.     D3DFILTER_LINEARMIPNEAREST,
  1193.     D3DFILTER_LINEARMIPLINEAR);
  1194.   {$EXTERNALSYM _D3DTEXTUREFILTER}
  1195.   D3DTEXTUREFILTER = _D3DTEXTUREFILTER;
  1196.   {$EXTERNALSYM D3DTEXTUREFILTER}
  1197.   TD3DTextureFilter = _D3DTEXTUREFILTER;
  1198.  
  1199. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1200.  
  1201.   PD3DBlend = ^TD3DBlend;
  1202.   _D3DBLEND = (
  1203.     D3DBLEND_INVALID_0,
  1204.     D3DBLEND_ZERO,
  1205.     D3DBLEND_ONE,
  1206.     D3DBLEND_SRCCOLOR,
  1207.     D3DBLEND_INVSRCCOLOR,
  1208.     D3DBLEND_SRCALPHA,
  1209.     D3DBLEND_INVSRCALPHA,
  1210.     D3DBLEND_DESTALPHA,
  1211.     D3DBLEND_INVDESTALPHA,
  1212.     D3DBLEND_DESTCOLOR,
  1213.     D3DBLEND_INVDESTCOLOR,
  1214.     D3DBLEND_SRCALPHASAT,
  1215.     D3DBLEND_BOTHSRCALPHA,
  1216.     D3DBLEND_BOTHINVSRCALPHA);
  1217.   {$EXTERNALSYM _D3DBLEND}
  1218.   D3DBLEND = _D3DBLEND;
  1219.   {$EXTERNALSYM D3DBLEND}
  1220.   TD3DBlend = _D3DBLEND;
  1221.  
  1222. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1223.  
  1224.   PD3DTextureBlend = ^TD3DTextureBlend;
  1225.   _D3DTEXTUREBLEND = (
  1226.     D3DTBLEND_INVALID_0,
  1227.     D3DTBLEND_DECAL,
  1228.     D3DTBLEND_MODULATE,
  1229.     D3DTBLEND_DECALALPHA,
  1230.     D3DTBLEND_MODULATEALPHA,
  1231.     D3DTBLEND_DECALMASK,
  1232.     D3DTBLEND_MODULATEMASK,
  1233.     D3DTBLEND_COPY
  1234. {$IFDEF DIRECT3D_VERSION_5},
  1235.     D3DTBLEND_ADD
  1236. {$ENDIF} // DIRECT3D_VERSION_5
  1237.   );
  1238.   {$EXTERNALSYM _D3DTEXTUREBLEND}
  1239.   D3DTEXTUREBLEND = _D3DTEXTUREBLEND;
  1240.   {$EXTERNALSYM D3DTEXTUREBLEND}
  1241.   TD3DTextureBlend = _D3DTEXTUREBLEND;
  1242.  
  1243. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1244.  
  1245.   PD3DTextureAddress = ^TD3DTextureAddress;
  1246.   _D3DTEXTUREADDRESS = (
  1247.     D3DTADDRESS_INVALID_0,
  1248.     D3DTADDRESS_WRAP,
  1249.     D3DTADDRESS_MIRROR,
  1250.     D3DTADDRESS_CLAMP
  1251. {$IFDEF DIRECT3D_VERSION_5},
  1252.     D3DTADDRESS_BORDER
  1253. {$ENDIF} // DIRECT3D_VERSION_5
  1254.   );
  1255.   {$EXTERNALSYM _D3DTEXTUREADDRESS}
  1256.   D3DTEXTUREADDRESS = _D3DTEXTUREADDRESS;
  1257.   {$EXTERNALSYM D3DTEXTUREADDRESS}
  1258.   TD3DTextureAddress = _D3DTEXTUREADDRESS;
  1259.  
  1260.   PD3DCull = ^TD3DCull;
  1261.   _D3DCULL = (
  1262.     D3DCULL_INVALID_0,
  1263.     D3DCULL_NONE,
  1264.     D3DCULL_CW,
  1265.     D3DCULL_CCW);
  1266.   {$EXTERNALSYM _D3DCULL}
  1267.   D3DCULL = _D3DCULL;
  1268.   {$EXTERNALSYM D3DCULL}
  1269.   TD3DCull = _D3DCULL;
  1270.  
  1271.   PD3DCmpFunc = ^TD3DCmpFunc;
  1272.   _D3DCMPFUNC = (
  1273.     D3DCMP_INVALID_0,
  1274.     D3DCMP_NEVER,
  1275.     D3DCMP_LESS,
  1276.     D3DCMP_EQUAL,
  1277.     D3DCMP_LESSEQUAL,
  1278.     D3DCMP_GREATER,
  1279.     D3DCMP_NOTEQUAL,
  1280.     D3DCMP_GREATEREQUAL,
  1281.     D3DCMP_ALWAYS);
  1282.   {$EXTERNALSYM _D3DCMPFUNC}
  1283.   D3DCMPFUNC = _D3DCMPFUNC;
  1284.   {$EXTERNALSYM D3DCMPFUNC}
  1285.   TD3DCmpFunc = _D3DCMPFUNC;
  1286.  
  1287. {$IFDEF DIRECT3D_VERSION_6}
  1288.   PD3DStencilOp = ^TD3DStencilOp;
  1289.   _D3DSTENCILOP = (
  1290.     D3DSTENCILOP_INVALID_0,
  1291.     D3DSTENCILOP_KEEP,
  1292.     D3DSTENCILOP_ZERO,
  1293.     D3DSTENCILOP_REPLACE,
  1294.     D3DSTENCILOP_INCRSAT,
  1295.     D3DSTENCILOP_DECRSAT,
  1296.     D3DSTENCILOP_INVERT,
  1297.     D3DSTENCILOP_INCR,
  1298.     D3DSTENCILOP_DECR);
  1299.   {$EXTERNALSYM _D3DSTENCILOP}
  1300.   D3DSTENCILOP = _D3DSTENCILOP;
  1301.   {$EXTERNALSYM D3DSTENCILOP}
  1302.   TD3DStencilOp = _D3DSTENCILOP;
  1303. {$ENDIF} // DIRECT3D_VERSION_6
  1304.  
  1305.   PD3DFogMode = ^TD3DFogMode;
  1306.   _D3DFOGMODE = (
  1307.     D3DFOG_NONE,
  1308.     D3DFOG_EXP,
  1309.     D3DFOG_EXP2
  1310. {$IFDEF DIRECT3D_VERSION_5},
  1311.     D3DFOG_LINEAR
  1312. {$ENDIF} // DIRECT3D_VERSION_5
  1313.   );
  1314.   {$EXTERNALSYM _D3DFOGMODE}
  1315.   D3DFOGMODE = _D3DFOGMODE;
  1316.   {$EXTERNALSYM D3DFOGMODE}
  1317.   TD3DFogMode = _D3DFOGMODE;
  1318.  
  1319. {$IFDEF DIRECT3D_VERSION_6}
  1320.   PD3DZBufferType = ^TD3DZBufferType;
  1321.   _D3DZBUFFERTYPE = (
  1322.     D3DZB_FALSE,
  1323.     D3DZB_TRUE,   // Z buffering
  1324.     D3DZB_USEW);  // W buffering
  1325.   {$EXTERNALSYM _D3DZBUFFERTYPE}
  1326.   D3DZBUFFERTYPE = _D3DZBUFFERTYPE;
  1327.   {$EXTERNALSYM D3DZBUFFERTYPE}
  1328.   TD3DZBufferType = _D3DZBUFFERTYPE;
  1329. {$ENDIF} // DIRECT3D_VERSION_6
  1330.  
  1331. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1332.  
  1333. {$IFDEF DIRECT3D_VERSION_5}
  1334.   PD3DAntialiasMode = ^TD3DAntialiasMode;
  1335.   _D3DANTIALIASMODE = (
  1336.     D3DANTIALIAS_NONE,
  1337.     D3DANTIALIAS_SORTDEPENDENT,
  1338.     D3DANTIALIAS_SORTINDEPENDENT);
  1339.   {$EXTERNALSYM _D3DANTIALIASMODE}
  1340.   D3DANTIALIASMODE = _D3DANTIALIASMODE;
  1341.   {$EXTERNALSYM D3DANTIALIASMODE}
  1342.   TD3DAntialiasMode = _D3DANTIALIASMODE;
  1343.  
  1344. // Vertex types supported by Direct3D
  1345.   PD3DVertexType = ^TD3DVertexType;
  1346.   _D3DVERTEXTYPE = (
  1347.     D3DVT_INVALID_0,
  1348.     D3DVT_VERTEX,
  1349.     D3DVT_LVERTEX,
  1350.     D3DVT_TLVERTEX);
  1351.   {$EXTERNALSYM _D3DVERTEXTYPE}
  1352.   D3DVERTEXTYPE = _D3DVERTEXTYPE;
  1353.   {$EXTERNALSYM D3DVERTEXTYPE}
  1354.   TD3DVertexType = _D3DVERTEXTYPE;
  1355.  
  1356. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1357.  
  1358. // Primitives supported by draw-primitive API
  1359.   PD3DPrimitiveType = ^TD3DPrimitiveType;
  1360.   _D3DPRIMITIVETYPE = (
  1361.     D3DPT_INVALID_0,
  1362.     D3DPT_POINTLIST,
  1363.     D3DPT_LINELIST,
  1364.     D3DPT_LINESTRIP,
  1365.     D3DPT_TRIANGLELIST,
  1366.     D3DPT_TRIANGLESTRIP,
  1367.     D3DPT_TRIANGLEFAN);
  1368.   {$EXTERNALSYM _D3DPRIMITIVETYPE}
  1369.   D3DPRIMITIVETYPE = _D3DPRIMITIVETYPE;
  1370.   {$EXTERNALSYM D3DPRIMITIVETYPE}
  1371.   TD3DPrimitiveType = _D3DPRIMITIVETYPE;
  1372.  
  1373. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1374.  
  1375. {$ENDIF} // DIRECT3D_VERSION_5
  1376.  
  1377. (*
  1378.  * Amount to add to a state to generate the override for that state.
  1379.  *)
  1380.  
  1381. const
  1382.   D3DSTATE_OVERRIDE_BIAS          = 256;
  1383.   {$EXTERNALSYM D3DSTATE_OVERRIDE_BIAS}
  1384.  
  1385. (*
  1386.  * A state which sets the override flag for the specified state type.
  1387.  *)
  1388.  
  1389. function D3DSTATE_OVERRIDE(StateType: DWORD): DWORD;
  1390. {$EXTERNALSYM D3DSTATE_OVERRIDE}
  1391.  
  1392. {$IFDEF DIRECT3D_VERSION_8}
  1393. //
  1394. // legacy transform state names
  1395. //
  1396. {$ENDIF} // DIRECT3D_VERSION_8
  1397. type
  1398.   PD3DTransformStateType = ^TD3DTransformStateType;
  1399.   TD3DTransformStateType = DWORD;
  1400. const
  1401.   D3DTRANSFORMSTATE_WORLD         = TD3DTransformStateType(1);
  1402.   {$EXTERNALSYM D3DTRANSFORMSTATE_WORLD}
  1403.   D3DTRANSFORMSTATE_VIEW          = TD3DTransformStateType(2);
  1404.   {$EXTERNALSYM D3DTRANSFORMSTATE_VIEW}
  1405.   D3DTRANSFORMSTATE_PROJECTION    = TD3DTransformStateType(3);
  1406.   {$EXTERNALSYM D3DTRANSFORMSTATE_PROJECTION}
  1407. {$IFDEF DIRECT3D_VERSION_7}
  1408.   D3DTRANSFORMSTATE_WORLD1        = TD3DTransformStateType(4);  // 2nd matrix to blend
  1409.   {$EXTERNALSYM D3DTRANSFORMSTATE_WORLD1}
  1410.   D3DTRANSFORMSTATE_WORLD2        = TD3DTransformStateType(5);  // 3rd matrix to blend
  1411.   {$EXTERNALSYM D3DTRANSFORMSTATE_WORLD2}
  1412.   D3DTRANSFORMSTATE_WORLD3        = TD3DTransformStateType(6);  // 4th matrix to blend
  1413.   {$EXTERNALSYM D3DTRANSFORMSTATE_WORLD3}
  1414.   D3DTRANSFORMSTATE_TEXTURE0      = TD3DTransformStateType(16);
  1415.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE0}
  1416.   D3DTRANSFORMSTATE_TEXTURE1      = TD3DTransformStateType(17);
  1417.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE1}
  1418.   D3DTRANSFORMSTATE_TEXTURE2      = TD3DTransformStateType(18);
  1419.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE2}
  1420.   D3DTRANSFORMSTATE_TEXTURE3      = TD3DTransformStateType(19);
  1421.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE3}
  1422.   D3DTRANSFORMSTATE_TEXTURE4      = TD3DTransformStateType(20);
  1423.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE4}
  1424.   D3DTRANSFORMSTATE_TEXTURE5      = TD3DTransformStateType(21);
  1425.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE5}
  1426.   D3DTRANSFORMSTATE_TEXTURE6      = TD3DTransformStateType(22);
  1427.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE6}
  1428.   D3DTRANSFORMSTATE_TEXTURE7      = TD3DTransformStateType(23);
  1429.   {$EXTERNALSYM D3DTRANSFORMSTATE_TEXTURE7}
  1430. {$ENDIF} // DIRECT3D_VERSION_7
  1431.  
  1432.  
  1433. type
  1434.   PD3DLightStateType = ^TD3DLightStateType;
  1435.   _D3DLIGHTSTATETYPE = (
  1436.     D3DLIGHTSTATE_INVALID_0,
  1437.     D3DLIGHTSTATE_MATERIAL,
  1438.     D3DLIGHTSTATE_AMBIENT,
  1439.     D3DLIGHTSTATE_COLORMODEL,
  1440.     D3DLIGHTSTATE_FOGMODE,
  1441.     D3DLIGHTSTATE_FOGSTART,
  1442.     D3DLIGHTSTATE_FOGEND,
  1443.     D3DLIGHTSTATE_FOGDENSITY
  1444. {$IFDEF DIRECT3D_VERSION_6},
  1445.     D3DLIGHTSTATE_COLORVERTEX
  1446.   {$EXTERNALSYM _D3DLIGHTSTATETYPE}
  1447. {$ENDIF} // DIRECT3D_VERSION_6
  1448.   );
  1449.   D3DLIGHTSTATETYPE = _D3DLIGHTSTATETYPE;
  1450.   {$EXTERNALSYM D3DLIGHTSTATETYPE}
  1451.   TD3DLightStateType = _D3DLIGHTSTATETYPE;
  1452.  
  1453. type  
  1454.   PD3DRenderStateType = ^TD3DRenderStateType;
  1455.   TD3DRenderStateType = DWORD;
  1456.  
  1457. const
  1458.   D3DRENDERSTATE_ANTIALIAS          = 2;    (* D3DANTIALIASMODE *)
  1459.   {$EXTERNALSYM D3DRENDERSTATE_ANTIALIAS}
  1460.   D3DRENDERSTATE_TEXTUREPERSPECTIVE = 4;    (* TRUE for perspective correction *)
  1461.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREPERSPECTIVE}
  1462.   D3DRENDERSTATE_ZENABLE            = 7;    (* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) *)
  1463.   {$EXTERNALSYM D3DRENDERSTATE_ZENABLE}
  1464.   D3DRENDERSTATE_FILLMODE           = 8;    (* D3DFILL_MODE        *)
  1465.   {$EXTERNALSYM D3DRENDERSTATE_FILLMODE}
  1466.   D3DRENDERSTATE_SHADEMODE          = 9;    (* D3DSHADEMODE *)
  1467.   {$EXTERNALSYM D3DRENDERSTATE_SHADEMODE}
  1468.   D3DRENDERSTATE_LINEPATTERN        = 10;   (* D3DLINEPATTERN *)
  1469.   {$EXTERNALSYM D3DRENDERSTATE_LINEPATTERN}
  1470.   D3DRENDERSTATE_ZWRITEENABLE       = 14;   (* TRUE to enable z writes *)
  1471.   {$EXTERNALSYM D3DRENDERSTATE_ZWRITEENABLE}
  1472.   D3DRENDERSTATE_ALPHATESTENABLE    = 15;   (* TRUE to enable alpha tests *)
  1473.   {$EXTERNALSYM D3DRENDERSTATE_ALPHATESTENABLE}
  1474.   D3DRENDERSTATE_LASTPIXEL          = 16;   (* TRUE for last-pixel on lines *)
  1475.   {$EXTERNALSYM D3DRENDERSTATE_LASTPIXEL}
  1476.   D3DRENDERSTATE_SRCBLEND           = 19;   (* D3DBLEND *)
  1477.   {$EXTERNALSYM D3DRENDERSTATE_SRCBLEND}
  1478.   D3DRENDERSTATE_DESTBLEND          = 20;   (* D3DBLEND *)
  1479.   {$EXTERNALSYM D3DRENDERSTATE_DESTBLEND}
  1480.   D3DRENDERSTATE_CULLMODE           = 22;   (* D3DCULL *)
  1481.   {$EXTERNALSYM D3DRENDERSTATE_CULLMODE}
  1482.   D3DRENDERSTATE_ZFUNC              = 23;   (* D3DCMPFUNC *)
  1483.   {$EXTERNALSYM D3DRENDERSTATE_ZFUNC}
  1484.   D3DRENDERSTATE_ALPHAREF           = 24;   (* D3DFIXED *)
  1485.   {$EXTERNALSYM D3DRENDERSTATE_ALPHAREF}
  1486.   D3DRENDERSTATE_ALPHAFUNC          = 25;   (* D3DCMPFUNC *)
  1487.   {$EXTERNALSYM D3DRENDERSTATE_ALPHAFUNC}
  1488.   D3DRENDERSTATE_DITHERENABLE       = 26;   (* TRUE to enable dithering *)
  1489.   {$EXTERNALSYM D3DRENDERSTATE_DITHERENABLE}
  1490. {$IFDEF DIRECT3D_VERSION_5}
  1491.   D3DRENDERSTATE_ALPHABLENDENABLE   = 27;   (* TRUE to enable alpha blending *)
  1492.   {$EXTERNALSYM D3DRENDERSTATE_ALPHABLENDENABLE}
  1493. {$ENDIF} // DIRECT3D_VERSION_5
  1494.   D3DRENDERSTATE_FOGENABLE          = 28;   (* TRUE to enable fog blending *)
  1495.   {$EXTERNALSYM D3DRENDERSTATE_FOGENABLE}
  1496.   D3DRENDERSTATE_SPECULARENABLE     = 29;   (* TRUE to enable specular *)
  1497.   {$EXTERNALSYM D3DRENDERSTATE_SPECULARENABLE}
  1498.   D3DRENDERSTATE_ZVISIBLE           = 30;   (* TRUE to enable z checking *)
  1499.   {$EXTERNALSYM D3DRENDERSTATE_ZVISIBLE}
  1500.   D3DRENDERSTATE_STIPPLEDALPHA      = 33;   (* TRUE to enable stippled alpha (RGB device only) *)
  1501.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEDALPHA}
  1502.   D3DRENDERSTATE_FOGCOLOR           = 34;   (* D3DCOLOR *)
  1503.   {$EXTERNALSYM D3DRENDERSTATE_FOGCOLOR}
  1504.   D3DRENDERSTATE_FOGTABLEMODE       = 35;   (* D3DFOGMODE *)
  1505.   {$EXTERNALSYM D3DRENDERSTATE_FOGTABLEMODE}
  1506. {$IFDEF DIRECT3D_VERSION_7}
  1507.   D3DRENDERSTATE_FOGSTART           = 36;   (* Fog start (for both vertex and pixel fog) *)
  1508.   {$EXTERNALSYM D3DRENDERSTATE_FOGSTART}
  1509.   D3DRENDERSTATE_FOGEND             = 37;   (* Fog end      *)
  1510.   {$EXTERNALSYM D3DRENDERSTATE_FOGEND}
  1511.   D3DRENDERSTATE_FOGDENSITY         = 38;   (* Fog density  *)
  1512.   {$EXTERNALSYM D3DRENDERSTATE_FOGDENSITY}
  1513. {$ENDIF} // DIRECT3D_VERSION_7
  1514. {$IFDEF DIRECT3D_VERSION_5}
  1515.   D3DRENDERSTATE_EDGEANTIALIAS      = 40;   (* TRUE to enable edge antialiasing *)
  1516.   {$EXTERNALSYM D3DRENDERSTATE_EDGEANTIALIAS}
  1517.   D3DRENDERSTATE_COLORKEYENABLE     = 41;   (* TRUE to enable source colorkeyed textures *)
  1518.   {$EXTERNALSYM D3DRENDERSTATE_COLORKEYENABLE}
  1519.   D3DRENDERSTATE_ZBIAS              = 47;   (* LONG Z bias *)
  1520.   {$EXTERNALSYM D3DRENDERSTATE_ZBIAS}
  1521.   D3DRENDERSTATE_RANGEFOGENABLE     = 48;   (* Enables range-based fog *)
  1522.   {$EXTERNALSYM D3DRENDERSTATE_RANGEFOGENABLE}
  1523. {$ENDIF} // DIRECT3D_VERSION_5
  1524.  
  1525. {$IFDEF DIRECT3D_VERSION_6}
  1526.   D3DRENDERSTATE_STENCILENABLE      = 52;   (* BOOL enable/disable stenciling *)
  1527.   {$EXTERNALSYM D3DRENDERSTATE_STENCILENABLE}
  1528.   D3DRENDERSTATE_STENCILFAIL        = 53;   (* D3DSTENCILOP to do if stencil test fails *)
  1529.   {$EXTERNALSYM D3DRENDERSTATE_STENCILFAIL}
  1530.   D3DRENDERSTATE_STENCILZFAIL       = 54;   (* D3DSTENCILOP to do if stencil test passes and Z test fails *)
  1531.   {$EXTERNALSYM D3DRENDERSTATE_STENCILZFAIL}
  1532.   D3DRENDERSTATE_STENCILPASS        = 55;   (* D3DSTENCILOP to do if both stencil and Z tests pass *)
  1533.   {$EXTERNALSYM D3DRENDERSTATE_STENCILPASS}
  1534.   D3DRENDERSTATE_STENCILFUNC        = 56;   (* D3DCMPFUNC fn.  Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true *)
  1535.   {$EXTERNALSYM D3DRENDERSTATE_STENCILFUNC}
  1536.   D3DRENDERSTATE_STENCILREF         = 57;   (* Reference value used in stencil test *)
  1537.   {$EXTERNALSYM D3DRENDERSTATE_STENCILREF}
  1538.   D3DRENDERSTATE_STENCILMASK        = 58;   (* Mask value used in stencil test *)
  1539.   {$EXTERNALSYM D3DRENDERSTATE_STENCILMASK}
  1540.   D3DRENDERSTATE_STENCILWRITEMASK   = 59;   (* Write mask applied to values written to stencil buffer *)
  1541.   {$EXTERNALSYM D3DRENDERSTATE_STENCILWRITEMASK}
  1542.   D3DRENDERSTATE_TEXTUREFACTOR      = 60;   (* D3DCOLOR used for multi-texture blend *)
  1543.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREFACTOR}
  1544. {$ENDIF} // DIRECT3D_VERSION_6
  1545.  
  1546. {$IFDEF DIRECT3D_VERSION_6}
  1547.  
  1548.   (*
  1549.    * 128 values [128; 255] are reserved for texture coordinate wrap flags.
  1550.    * These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using
  1551.    * a flags word preserves forward compatibility with texture coordinates
  1552.    * that are >2D.
  1553.    *)
  1554.   D3DRENDERSTATE_WRAP0              = 128;  (* wrap for 1st texture coord. set *)
  1555.   {$EXTERNALSYM D3DRENDERSTATE_WRAP0}
  1556.   D3DRENDERSTATE_WRAP1              = 129;  (* wrap for 2nd texture coord. set *)
  1557.   {$EXTERNALSYM D3DRENDERSTATE_WRAP1}
  1558.   D3DRENDERSTATE_WRAP2              = 130;  (* wrap for 3rd texture coord. set *)
  1559.   {$EXTERNALSYM D3DRENDERSTATE_WRAP2}
  1560.   D3DRENDERSTATE_WRAP3              = 131;  (* wrap for 4th texture coord. set *)
  1561.   {$EXTERNALSYM D3DRENDERSTATE_WRAP3}
  1562.   D3DRENDERSTATE_WRAP4              = 132;  (* wrap for 5th texture coord. set *)
  1563.   {$EXTERNALSYM D3DRENDERSTATE_WRAP4}
  1564.   D3DRENDERSTATE_WRAP5              = 133;  (* wrap for 6th texture coord. set *)
  1565.   {$EXTERNALSYM D3DRENDERSTATE_WRAP5}
  1566.   D3DRENDERSTATE_WRAP6              = 134;  (* wrap for 7th texture coord. set *)
  1567.   {$EXTERNALSYM D3DRENDERSTATE_WRAP6}
  1568.   D3DRENDERSTATE_WRAP7              = 135;  (* wrap for 8th texture coord. set *)
  1569.   {$EXTERNALSYM D3DRENDERSTATE_WRAP7}
  1570. {$ENDIF} // DIRECT3D_VERSION_6
  1571. {$IFDEF DIRECT3D_VERSION_7}
  1572.   D3DRENDERSTATE_CLIPPING            = 136;
  1573.   {$EXTERNALSYM D3DRENDERSTATE_CLIPPING}
  1574.   D3DRENDERSTATE_LIGHTING            = 137;
  1575.   {$EXTERNALSYM D3DRENDERSTATE_LIGHTING}
  1576.   D3DRENDERSTATE_EXTENTS             = 138;
  1577.   {$EXTERNALSYM D3DRENDERSTATE_EXTENTS}
  1578.   D3DRENDERSTATE_AMBIENT             = 139;
  1579.   {$EXTERNALSYM D3DRENDERSTATE_AMBIENT}
  1580.   D3DRENDERSTATE_FOGVERTEXMODE       = 140;
  1581.   {$EXTERNALSYM D3DRENDERSTATE_FOGVERTEXMODE}
  1582.   D3DRENDERSTATE_COLORVERTEX         = 141;
  1583.   {$EXTERNALSYM D3DRENDERSTATE_COLORVERTEX}
  1584.   D3DRENDERSTATE_LOCALVIEWER         = 142;
  1585.   {$EXTERNALSYM D3DRENDERSTATE_LOCALVIEWER}
  1586.   D3DRENDERSTATE_NORMALIZENORMALS    = 143;
  1587.   {$EXTERNALSYM D3DRENDERSTATE_NORMALIZENORMALS}
  1588.   D3DRENDERSTATE_COLORKEYBLENDENABLE = 144;
  1589.   {$EXTERNALSYM D3DRENDERSTATE_COLORKEYBLENDENABLE}
  1590.   D3DRENDERSTATE_DIFFUSEMATERIALSOURCE    = 145;
  1591.   {$EXTERNALSYM D3DRENDERSTATE_DIFFUSEMATERIALSOURCE}
  1592.   D3DRENDERSTATE_SPECULARMATERIALSOURCE   = 146;
  1593.   {$EXTERNALSYM D3DRENDERSTATE_SPECULARMATERIALSOURCE}
  1594.   D3DRENDERSTATE_AMBIENTMATERIALSOURCE    = 147;
  1595.   {$EXTERNALSYM D3DRENDERSTATE_AMBIENTMATERIALSOURCE}
  1596.   D3DRENDERSTATE_EMISSIVEMATERIALSOURCE   = 148;
  1597.   {$EXTERNALSYM D3DRENDERSTATE_EMISSIVEMATERIALSOURCE}
  1598.   D3DRENDERSTATE_VERTEXBLEND              = 151;
  1599.   {$EXTERNALSYM D3DRENDERSTATE_VERTEXBLEND}
  1600.   D3DRENDERSTATE_CLIPPLANEENABLE          = 152;
  1601.   {$EXTERNALSYM D3DRENDERSTATE_CLIPPLANEENABLE}
  1602.  
  1603. {$ENDIF} // DIRECT3D_VERSION_7
  1604.  
  1605. //
  1606. // retired renderstates - not supported for DX7 interfaces
  1607. //
  1608.   D3DRENDERSTATE_TEXTUREHANDLE      = 1;    (* Texture handle for legacy interfaces (Texture;Texture2) *)
  1609.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREHANDLE}
  1610.   D3DRENDERSTATE_TEXTUREADDRESS     = 3;    (* D3DTEXTUREADDRESS  *)
  1611.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREADDRESS}
  1612.   D3DRENDERSTATE_WRAPU              = 5;    (* TRUE for wrapping in u *)
  1613.   {$EXTERNALSYM D3DRENDERSTATE_WRAPU}
  1614.   D3DRENDERSTATE_WRAPV              = 6;    (* TRUE for wrapping in v *)
  1615.   {$EXTERNALSYM D3DRENDERSTATE_WRAPV}
  1616.   D3DRENDERSTATE_MONOENABLE         = 11;   (* TRUE to enable mono rasterization *)
  1617.   {$EXTERNALSYM D3DRENDERSTATE_MONOENABLE}
  1618.   D3DRENDERSTATE_ROP2               = 12;   (* ROP2 *)
  1619.   {$EXTERNALSYM D3DRENDERSTATE_ROP2}
  1620.   D3DRENDERSTATE_PLANEMASK          = 13;   (* DWORD physical plane mask *)
  1621.   {$EXTERNALSYM D3DRENDERSTATE_PLANEMASK}
  1622.   D3DRENDERSTATE_TEXTUREMAG         = 17;   (* D3DTEXTUREFILTER *)
  1623.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREMAG}
  1624.   D3DRENDERSTATE_TEXTUREMIN         = 18;   (* D3DTEXTUREFILTER *)
  1625.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREMIN}
  1626.   D3DRENDERSTATE_TEXTUREMAPBLEND    = 21;   (* D3DTEXTUREBLEND *)
  1627.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREMAPBLEND}
  1628.   D3DRENDERSTATE_SUBPIXEL           = 31;   (* TRUE to enable subpixel correction *)
  1629.   {$EXTERNALSYM D3DRENDERSTATE_SUBPIXEL}
  1630.   D3DRENDERSTATE_SUBPIXELX          = 32;   (* TRUE to enable correction in X only *)
  1631.   {$EXTERNALSYM D3DRENDERSTATE_SUBPIXELX}
  1632.   D3DRENDERSTATE_STIPPLEENABLE      = 39;   (* TRUE to enable stippling *)
  1633.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEENABLE}
  1634. {$IFDEF DIRECT3D_VERSION_5}
  1635.   D3DRENDERSTATE_BORDERCOLOR        = 43;   (* Border color for texturing w/border *)
  1636.   {$EXTERNALSYM D3DRENDERSTATE_BORDERCOLOR}
  1637.   D3DRENDERSTATE_TEXTUREADDRESSU    = 44;   (* Texture addressing mode for U coordinate *)
  1638.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREADDRESSU}
  1639.   D3DRENDERSTATE_TEXTUREADDRESSV    = 45;   (* Texture addressing mode for V coordinate *)
  1640.   {$EXTERNALSYM D3DRENDERSTATE_TEXTUREADDRESSV}
  1641.   D3DRENDERSTATE_MIPMAPLODBIAS      = 46;   (* D3DVALUE Mipmap LOD bias *)
  1642.   {$EXTERNALSYM D3DRENDERSTATE_MIPMAPLODBIAS}
  1643.   D3DRENDERSTATE_ANISOTROPY         = 49;   (* Max. anisotropy. 1 = no anisotropy *)
  1644.   {$EXTERNALSYM D3DRENDERSTATE_ANISOTROPY}
  1645. {$ENDIF} // DIRECT3D_VERSION_5
  1646.   D3DRENDERSTATE_FLUSHBATCH         = 50;   (* Explicit flush for DP batching (DX5 Only) *)
  1647.   {$EXTERNALSYM D3DRENDERSTATE_FLUSHBATCH}
  1648. {$IFDEF DIRECT3D_VERSION_6}
  1649.   D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT=51; (* BOOL enable sort-independent transparency *)
  1650.   {$EXTERNALSYM D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT}
  1651. {$ENDIF} // DIRECT3D_VERSION_6
  1652.   D3DRENDERSTATE_STIPPLEPATTERN00   = 64;   (* Stipple pattern 01...  *)
  1653.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN00}
  1654.   D3DRENDERSTATE_STIPPLEPATTERN01   = 65;
  1655.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN01}
  1656.   D3DRENDERSTATE_STIPPLEPATTERN02   = 66;
  1657.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN02}
  1658.   D3DRENDERSTATE_STIPPLEPATTERN03   = 67;
  1659.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN03}
  1660.   D3DRENDERSTATE_STIPPLEPATTERN04   = 68;
  1661.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN04}
  1662.   D3DRENDERSTATE_STIPPLEPATTERN05   = 69;
  1663.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN05}
  1664.   D3DRENDERSTATE_STIPPLEPATTERN06   = 70;
  1665.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN06}
  1666.   D3DRENDERSTATE_STIPPLEPATTERN07   = 71;
  1667.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN07}
  1668.   D3DRENDERSTATE_STIPPLEPATTERN08   = 72;
  1669.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN08}
  1670.   D3DRENDERSTATE_STIPPLEPATTERN09   = 73;
  1671.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN09}
  1672.   D3DRENDERSTATE_STIPPLEPATTERN10   = 74;
  1673.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN10}
  1674.   D3DRENDERSTATE_STIPPLEPATTERN11   = 75;
  1675.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN11}
  1676.   D3DRENDERSTATE_STIPPLEPATTERN12   = 76;
  1677.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN12}
  1678.   D3DRENDERSTATE_STIPPLEPATTERN13   = 77;
  1679.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN13}
  1680.   D3DRENDERSTATE_STIPPLEPATTERN14   = 78;
  1681.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN14}
  1682.   D3DRENDERSTATE_STIPPLEPATTERN15   = 79;
  1683.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN15}
  1684.   D3DRENDERSTATE_STIPPLEPATTERN16   = 80;
  1685.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN16}
  1686.   D3DRENDERSTATE_STIPPLEPATTERN17   = 81;
  1687.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN17}
  1688.   D3DRENDERSTATE_STIPPLEPATTERN18   = 82;
  1689.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN18}
  1690.   D3DRENDERSTATE_STIPPLEPATTERN19   = 83;
  1691.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN19}
  1692.   D3DRENDERSTATE_STIPPLEPATTERN20   = 84;
  1693.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN20}
  1694.   D3DRENDERSTATE_STIPPLEPATTERN21   = 85;
  1695.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN21}
  1696.   D3DRENDERSTATE_STIPPLEPATTERN22   = 86;
  1697.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN22}
  1698.   D3DRENDERSTATE_STIPPLEPATTERN23   = 87;
  1699.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN23}
  1700.   D3DRENDERSTATE_STIPPLEPATTERN24   = 88;
  1701.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN24}
  1702.   D3DRENDERSTATE_STIPPLEPATTERN25   = 89;
  1703.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN25}
  1704.   D3DRENDERSTATE_STIPPLEPATTERN26   = 90;
  1705.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN26}
  1706.   D3DRENDERSTATE_STIPPLEPATTERN27   = 91;
  1707.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN27}
  1708.   D3DRENDERSTATE_STIPPLEPATTERN28   = 92;
  1709.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN28}
  1710.   D3DRENDERSTATE_STIPPLEPATTERN29   = 93;
  1711.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN29}
  1712.   D3DRENDERSTATE_STIPPLEPATTERN30   = 94;
  1713.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN30}
  1714.   D3DRENDERSTATE_STIPPLEPATTERN31   = 95;
  1715.   {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN31}
  1716.  
  1717. //
  1718. // retired renderstate names - the values are still used under new naming conventions
  1719. //
  1720.   D3DRENDERSTATE_FOGTABLESTART      = 36;   (* Fog table start    *)
  1721.   {$EXTERNALSYM D3DRENDERSTATE_FOGTABLESTART}
  1722.   D3DRENDERSTATE_FOGTABLEEND        = 37;   (* Fog table end      *)
  1723.   {$EXTERNALSYM D3DRENDERSTATE_FOGTABLEEND}
  1724.   D3DRENDERSTATE_FOGTABLEDENSITY    = 38;   (* Fog table density  *)
  1725.   {$EXTERNALSYM D3DRENDERSTATE_FOGTABLEDENSITY}
  1726.  
  1727.  
  1728. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1729.  
  1730. type
  1731. // Values for material source
  1732.   PD3DMateralColorSource = ^TD3DMateralColorSource;
  1733.   _D3DMATERIALCOLORSOURCE = (
  1734.     D3DMCS_MATERIAL,              // Color from material is used
  1735.     D3DMCS_COLOR1,                // Diffuse vertex color is used
  1736.     D3DMCS_COLOR2                 // Specular vertex color is used
  1737.   );
  1738.   {$EXTERNALSYM _D3DMATERIALCOLORSOURCE}
  1739.   D3DMATERIALCOLORSOURCE = _D3DMATERIALCOLORSOURCE;
  1740.   {$EXTERNALSYM D3DMATERIALCOLORSOURCE}
  1741.   TD3DMateralColorSource = _D3DMATERIALCOLORSOURCE;
  1742.  
  1743. {$IFDEF DIRECT3D_VERSION_5}
  1744. const
  1745.   // For back-compatibility with legacy compilations
  1746.   D3DRENDERSTATE_BLENDENABLE = D3DRENDERSTATE_ALPHABLENDENABLE;
  1747.   {$EXTERNALSYM D3DRENDERSTATE_BLENDENABLE}
  1748. {$ENDIF} // DIRECT3D_VERSION_5
  1749.  
  1750. {$IFDEF DIRECT3D_VERSION_6}
  1751.  
  1752. // Bias to apply to the texture coordinate set to apply a wrap to.
  1753.    D3DRENDERSTATE_WRAPBIAS                = 128;
  1754.    {$EXTERNALSYM D3DRENDERSTATE_WRAPBIAS}
  1755.  
  1756. (* Flags to construct the WRAP render states *)
  1757.   D3DWRAP_U   = $00000001;
  1758.   {$EXTERNALSYM D3DWRAP_U}
  1759.   D3DWRAP_V   = $00000002;
  1760.   {$EXTERNALSYM D3DWRAP_V}
  1761.  
  1762. {$ENDIF} // DIRECT3D_VERSION_6
  1763.  
  1764. {$IFDEF DIRECT3D_VERSION_7}
  1765.  
  1766. (* Flags to construct the WRAP render states for 1D thru 4D texture coordinates *)
  1767.   D3DWRAPCOORD_0   = $00000001;    // same as D3DWRAP_U
  1768.   {$EXTERNALSYM D3DWRAPCOORD_0}
  1769.   D3DWRAPCOORD_1   = $00000002;    // same as D3DWRAP_V
  1770.   {$EXTERNALSYM D3DWRAPCOORD_1}
  1771.   D3DWRAPCOORD_2   = $00000004;
  1772.   {$EXTERNALSYM D3DWRAPCOORD_2}
  1773.   D3DWRAPCOORD_3   = $00000008;
  1774.   {$EXTERNALSYM D3DWRAPCOORD_3}
  1775.  
  1776. {$ENDIF} // DIRECT3D_VERSION_7
  1777.  
  1778. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1779.  
  1780. function D3DRENDERSTATE_STIPPLEPATTERN(y: Integer): TD3DRenderStateType;
  1781. {$EXTERNALSYM D3DRENDERSTATE_STIPPLEPATTERN}
  1782.  
  1783. type
  1784.   PD3DState = ^TD3DState;
  1785.   _D3DSTATE = packed record
  1786.     case Integer of
  1787.     {$IFDEF DIRECT3D_VERSION_LESS_8}
  1788.     0: (
  1789.       dtstTransformStateType: TD3DTransformStateType;
  1790.      );
  1791.     {$ENDIF} // DIRECT3D_VERSION_LESS_8
  1792.     1: (
  1793.       dlstLightStateType: TD3DLightStateType;
  1794.       dwArg: array [0..0] of DWORD;
  1795.      );
  1796.     2: (
  1797.       drstRenderStateType: TD3DRenderStateType;
  1798.       dvArg: array [0..0] of TD3DValue;
  1799.      );
  1800.   end;
  1801.   {$EXTERNALSYM _D3DSTATE}
  1802.   D3DSTATE = _D3DSTATE;
  1803.   {$EXTERNALSYM D3DSTATE}
  1804.   TD3DState = _D3DSTATE;
  1805.  
  1806. (*
  1807.  * Operation used to load matrices
  1808.  * hDstMat = hSrcMat
  1809.  *)
  1810.   PD3DMatrixLoad = ^TD3DMatrixLoad;
  1811.   _D3DMATRIXLOAD = packed record
  1812.     hDestMatrix: TD3DMatrixHandle;   (* Destination matrix *)
  1813.     hSrcMatrix: TD3DMatrixHandle;    (* Source matrix *)
  1814.   end;
  1815.   {$EXTERNALSYM _D3DMATRIXLOAD}
  1816.   D3DMATRIXLOAD = _D3DMATRIXLOAD;
  1817.   {$EXTERNALSYM D3DMATRIXLOAD}
  1818.   TD3DMatrixLoad = _D3DMATRIXLOAD;
  1819.  
  1820. (*
  1821.  * Operation used to multiply matrices
  1822.  * hDstMat = hSrcMat1 * hSrcMat2
  1823.  *)
  1824.   PD3DMatrixMultiply = ^TD3DMatrixMultiply;
  1825.   _D3DMATRIXMULTIPLY = packed record
  1826.     hDestMatrix: TD3DMatrixHandle;   (* Destination matrix *)
  1827.     hSrcMatrix1: TD3DMatrixHandle;   (* First source matrix *)
  1828.     hSrcMatrix2: TD3DMatrixHandle;   (* Second source matrix *)
  1829.   end;
  1830.   {$EXTERNALSYM _D3DMATRIXMULTIPLY}
  1831.   D3DMATRIXMULTIPLY = _D3DMATRIXMULTIPLY;
  1832.   {$EXTERNALSYM D3DMATRIXMULTIPLY}
  1833.   TD3DMatrixMultiply = _D3DMATRIXMULTIPLY;
  1834.  
  1835. (*
  1836.  * Operation used to transform and light vertices.
  1837.  *)
  1838.   PD3DProcessVertices = ^TD3DProcessVertices;
  1839.   _D3DPROCESSVERTICES = packed record
  1840.     dwFlags: DWORD;           (* Do we transform or light or just copy? *)
  1841.     wStart: WORD;             (* Index to first vertex in source *)
  1842.     wDest: WORD;              (* Index to first vertex in local buffer *)
  1843.     dwCount: DWORD;           (* Number of vertices to be processed *)
  1844.     dwReserved: DWORD;        (* Must be zero *)
  1845.   end;
  1846.   {$EXTERNALSYM _D3DPROCESSVERTICES}
  1847.   D3DPROCESSVERTICES = _D3DPROCESSVERTICES;
  1848.   {$EXTERNALSYM D3DPROCESSVERTICES}
  1849.   TD3DProcessVertices = _D3DPROCESSVERTICES;
  1850.  
  1851. const
  1852.   D3DPROCESSVERTICES_TRANSFORMLIGHT       = $00000000;
  1853.   {$EXTERNALSYM D3DPROCESSVERTICES_TRANSFORMLIGHT}
  1854.   D3DPROCESSVERTICES_TRANSFORM            = $00000001;
  1855.   {$EXTERNALSYM D3DPROCESSVERTICES_TRANSFORM}
  1856.   D3DPROCESSVERTICES_COPY                 = $00000002;
  1857.   {$EXTERNALSYM D3DPROCESSVERTICES_COPY}
  1858.   D3DPROCESSVERTICES_OPMASK               = $00000007;
  1859.   {$EXTERNALSYM D3DPROCESSVERTICES_OPMASK}
  1860.  
  1861.   D3DPROCESSVERTICES_UPDATEEXTENTS        = $00000008;
  1862.   {$EXTERNALSYM D3DPROCESSVERTICES_UPDATEEXTENTS}
  1863.   D3DPROCESSVERTICES_NOCOLOR              = $00000010;
  1864.   {$EXTERNALSYM D3DPROCESSVERTICES_NOCOLOR}
  1865.  
  1866. {$IFDEF DIRECT3D_VERSION_6}
  1867. {$IFDEF DIRECT3D_VERSION_LESS_8}
  1868.  
  1869. (*
  1870.  * State enumerants for per-stage texture processing.
  1871.  *)
  1872. type
  1873.   PD3DTextureStageStateType = ^TD3DTextureStageStateType;
  1874.   TD3DTextureStageStateType = DWORD;
  1875. const
  1876.   D3DTSS_COLOROP        =  1; (* D3DTEXTUREOP - per-stage blending controls for color channels *)
  1877.   {$EXTERNALSYM D3DTSS_COLOROP}
  1878.   D3DTSS_COLORARG1      =  2; (* D3DTA_* (texture arg) *)
  1879.   {$EXTERNALSYM D3DTSS_COLORARG1}
  1880.   D3DTSS_COLORARG2      =  3; (* D3DTA_* (texture arg) *)
  1881.   {$EXTERNALSYM D3DTSS_COLORARG2}
  1882.   D3DTSS_ALPHAOP        =  4; (* D3DTEXTUREOP - per-stage blending controls for alpha channel *)
  1883.   {$EXTERNALSYM D3DTSS_ALPHAOP}
  1884.   D3DTSS_ALPHAARG1      =  5; (* D3DTA_* (texture arg) *)
  1885.   {$EXTERNALSYM D3DTSS_ALPHAARG1}
  1886.   D3DTSS_ALPHAARG2      =  6; (* D3DTA_* (texture arg) *)
  1887.   {$EXTERNALSYM D3DTSS_ALPHAARG2}
  1888.   D3DTSS_BUMPENVMAT00   =  7; (* D3DVALUE (bump mapping matrix) *)
  1889.   {$EXTERNALSYM D3DTSS_BUMPENVMAT00}
  1890.   D3DTSS_BUMPENVMAT01   =  8; (* D3DVALUE (bump mapping matrix) *)
  1891.   {$EXTERNALSYM D3DTSS_BUMPENVMAT01}
  1892.   D3DTSS_BUMPENVMAT10   =  9; (* D3DVALUE (bump mapping matrix) *)
  1893.   {$EXTERNALSYM D3DTSS_BUMPENVMAT10}
  1894.   D3DTSS_BUMPENVMAT11   = 10; (* D3DVALUE (bump mapping matrix) *)
  1895.   {$EXTERNALSYM D3DTSS_BUMPENVMAT11}
  1896.   D3DTSS_TEXCOORDINDEX  = 11; (* identifies which set of texture coordinates index this texture *)
  1897.   {$EXTERNALSYM D3DTSS_TEXCOORDINDEX}
  1898.   D3DTSS_ADDRESS        = 12; (* D3DTEXTUREADDRESS for both coordinates *)
  1899.   {$EXTERNALSYM D3DTSS_ADDRESS}
  1900.   D3DTSS_ADDRESSU       = 13; (* D3DTEXTUREADDRESS for U coordinate *)
  1901.   {$EXTERNALSYM D3DTSS_ADDRESSU}
  1902.   D3DTSS_ADDRESSV       = 14; (* D3DTEXTUREADDRESS for V coordinate *)
  1903.   {$EXTERNALSYM D3DTSS_ADDRESSV}
  1904.   D3DTSS_BORDERCOLOR    = 15; (* D3DCOLOR *)
  1905.   {$EXTERNALSYM D3DTSS_BORDERCOLOR}
  1906.   D3DTSS_MAGFILTER      = 16; (* D3DTEXTUREMAGFILTER filter to use for magnification *)
  1907.   {$EXTERNALSYM D3DTSS_MAGFILTER}
  1908.   D3DTSS_MINFILTER      = 17; (* D3DTEXTUREMINFILTER filter to use for minification *)
  1909.   {$EXTERNALSYM D3DTSS_MINFILTER}
  1910.   D3DTSS_MIPFILTER      = 18; (* D3DTEXTUREMIPFILTER filter to use between mipmaps during minification *)
  1911.   {$EXTERNALSYM D3DTSS_MIPFILTER}
  1912.   D3DTSS_MIPMAPLODBIAS  = 19; (* D3DVALUE Mipmap LOD bias *)
  1913.   {$EXTERNALSYM D3DTSS_MIPMAPLODBIAS}
  1914.   D3DTSS_MAXMIPLEVEL    = 20; (* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) *)
  1915.   {$EXTERNALSYM D3DTSS_MAXMIPLEVEL}
  1916.   D3DTSS_MAXANISOTROPY  = 21; (* DWORD maximum anisotropy *)
  1917.   {$EXTERNALSYM D3DTSS_MAXANISOTROPY}
  1918.   D3DTSS_BUMPENVLSCALE  = 22; (* D3DVALUE scale for bump map luminance *)
  1919.   {$EXTERNALSYM D3DTSS_BUMPENVLSCALE}
  1920.   D3DTSS_BUMPENVLOFFSET = 23; (* D3DVALUE offset for bump map luminance *)
  1921.   {$EXTERNALSYM D3DTSS_BUMPENVLOFFSET}
  1922. {$IFDEF DIRECT3D_VERSION_7}
  1923.   D3DTSS_TEXTURETRANSFORMFLAGS = 24; (* D3DTEXTURETRANSFORMFLAGS controls texture transform *)
  1924.   {$EXTERNALSYM D3DTSS_TEXTURETRANSFORMFLAGS}
  1925. {$ENDIF}
  1926.  
  1927. {$IFDEF DIRECT3D_VERSION_7}
  1928. // Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position
  1929. // and normal in the camera space) should be taken as texture coordinates
  1930. // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from
  1931. //
  1932.   D3DTSS_TCI_PASSTHRU                             = $00000000;
  1933.   {$EXTERNALSYM D3DTSS_TCI_PASSTHRU}
  1934.   D3DTSS_TCI_CAMERASPACENORMAL                    = $00010000;
  1935.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACENORMAL}
  1936.   D3DTSS_TCI_CAMERASPACEPOSITION                  = $00020000;
  1937.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEPOSITION}
  1938.   D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR          = $00030000;
  1939.   {$EXTERNALSYM D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR}
  1940. {$ENDIF}
  1941.  
  1942. type
  1943. (*
  1944.  * Enumerations for COLOROP and ALPHAOP texture blending operations set in
  1945.  * texture processing stage controls in D3DRENDERSTATE.
  1946.  *)
  1947.   PD3DTextureOp = ^TD3DTextureOp;
  1948.   _D3DTEXTUREOP = (
  1949.     D3DTOP_INVALID_0,
  1950. // Control
  1951.     D3DTOP_DISABLE   ,      // disables stage
  1952.     D3DTOP_SELECTARG1,      // the default
  1953.     D3DTOP_SELECTARG2,
  1954.  
  1955. // Modulate
  1956.     D3DTOP_MODULATE  ,      // multiply args together
  1957.     D3DTOP_MODULATE2X,      // multiply and  1 bit
  1958.     D3DTOP_MODULATE4X,      // multiply and  2 bits
  1959.  
  1960. // Add
  1961.     D3DTOP_ADD        ,   // add arguments together
  1962.     D3DTOP_ADDSIGNED  ,   // add with -0.5 bias
  1963.     D3DTOP_ADDSIGNED2X,   // as above but left  1 bit
  1964.     D3DTOP_SUBTRACT   ,   // Arg1 - Arg2, with no saturation
  1965.     D3DTOP_ADDSMOOTH  ,   // add 2 args, subtract product
  1966.                           // Arg1 + Arg2 - Arg1*Arg2
  1967.                           // = Arg1 + (1-Arg1)*Arg2
  1968.  
  1969. // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha)
  1970.     D3DTOP_BLENDDIFFUSEALPHA  , // iterated alpha
  1971.     D3DTOP_BLENDTEXTUREALPHA  , // texture alpha
  1972.     D3DTOP_BLENDFACTORALPHA   , // alpha from D3DRENDERSTATE_TEXTUREFACTOR
  1973.     // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha)
  1974.     D3DTOP_BLENDTEXTUREALPHAPM, // texture alpha
  1975.     D3DTOP_BLENDCURRENTALPHA  , // by alpha of current color
  1976.  
  1977. // Specular mapping
  1978.     D3DTOP_PREMODULATE           ,     // modulate with next texture before use
  1979.     D3DTOP_MODULATEALPHA_ADDCOLOR,     // Arg1.RGB + Arg1.A*Arg2.RGB
  1980.                                        // COLOROP only
  1981.     D3DTOP_MODULATECOLOR_ADDALPHA,     // Arg1.RGB*Arg2.RGB + Arg1.A
  1982.                                             // COLOROP only
  1983.     D3DTOP_MODULATEINVALPHA_ADDCOLOR,  // (1-Arg1.A)*Arg2.RGB + Arg1.RGB
  1984.                                        // COLOROP only
  1985.     D3DTOP_MODULATEINVCOLOR_ADDALPHA,  // (1-Arg1.RGB)*Arg2.RGB + Arg1.A
  1986.                                             // COLOROP only
  1987.  
  1988. // Bump mapping
  1989.     D3DTOP_BUMPENVMAP         , // per pixel env map perturbation
  1990.     D3DTOP_BUMPENVMAPLUMINANCE, // with luminance channel
  1991.     // This can do either diffuse or specular bump mapping with correct input.
  1992.     // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B)
  1993.     // where each component has been scaled and offset to make it signed.
  1994.     // The result is replicated into all four (including alpha) channels.
  1995.     // This is a valid COLOROP only.
  1996.     D3DTOP_DOTPRODUCT3
  1997.   );
  1998.   {$EXTERNALSYM _D3DTEXTUREOP}
  1999.   D3DTEXTUREOP = _D3DTEXTUREOP;
  2000.   {$EXTERNALSYM D3DTEXTUREOP}
  2001.   TD3DTextureOp = _D3DTEXTUREOP;
  2002.  
  2003. (*
  2004.  * Values for COLORARG1,2 and ALPHAARG1,2 texture blending operations
  2005.  * set in texture processing stage controls in D3DRENDERSTATE.
  2006.  *)
  2007. const
  2008.   D3DTA_SELECTMASK        = $0000000f;  // mask for arg selector
  2009.   {$EXTERNALSYM D3DTA_SELECTMASK}
  2010.   D3DTA_DIFFUSE           = $00000000;  // select diffuse color
  2011.   {$EXTERNALSYM D3DTA_DIFFUSE}
  2012.   D3DTA_CURRENT           = $00000001;  // select result of previous stage
  2013.   {$EXTERNALSYM D3DTA_CURRENT}
  2014.   D3DTA_TEXTURE           = $00000002;  // select texture color
  2015.   {$EXTERNALSYM D3DTA_TEXTURE}
  2016.   D3DTA_TFACTOR           = $00000003;  // select RENDERSTATE_TEXTUREFACTOR
  2017.   {$EXTERNALSYM D3DTA_TFACTOR}
  2018. {$IFDEF DIRECT3D_VERSION_7}
  2019.   D3DTA_SPECULAR          = $00000004;  // select specular color
  2020.   {$EXTERNALSYM D3DTA_SPECULAR}
  2021. {$ENDIF}
  2022.   D3DTA_COMPLEMENT        = $00000010;  // take 1.0 - x
  2023.   {$EXTERNALSYM D3DTA_COMPLEMENT}
  2024.   D3DTA_ALPHAREPLICATE    = $00000020;  // replicate alpha to color components
  2025.   {$EXTERNALSYM D3DTA_ALPHAREPLICATE}
  2026.  
  2027. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2028.  
  2029. (*
  2030.  *  IDirect3DTexture2 State Filter Types
  2031.  *)
  2032. type
  2033.   PD3DTextureMagFilter = ^TD3DTextureMagFilter;
  2034.   _D3DTEXTUREMAGFILTER = (
  2035.     D3DTFG_INVALID_0,
  2036.     D3DTFG_POINT        ,    // nearest
  2037.     D3DTFG_LINEAR       ,    // linear interpolation
  2038.     D3DTFG_FLATCUBIC    ,    // cubic
  2039.     D3DTFG_GAUSSIANCUBIC,    // different cubic kernel
  2040.     D3DTFG_ANISOTROPIC
  2041.   );
  2042.   {$EXTERNALSYM _D3DTEXTUREMAGFILTER}
  2043.   D3DTEXTUREMAGFILTER = _D3DTEXTUREMAGFILTER;
  2044.   {$EXTERNALSYM D3DTEXTUREMAGFILTER}
  2045.   TD3DTextureMagFilter = _D3DTEXTUREMAGFILTER;
  2046.  
  2047.   PD3DTextureMinFilter = ^TD3DTextureMinFilter;
  2048.   _D3DTEXTUREMINFILTER = (
  2049.     D3DTFN_INVALID_0,
  2050.     D3DTFN_POINT      ,    // nearest
  2051.     D3DTFN_LINEAR     ,    // linear interpolation
  2052.     D3DTFN_ANISOTROPIC
  2053.   );
  2054.   {$EXTERNALSYM _D3DTEXTUREMINFILTER}
  2055.   D3DTEXTUREMINFILTER = _D3DTEXTUREMINFILTER;
  2056.   {$EXTERNALSYM D3DTEXTUREMINFILTER}
  2057.   TD3DTextureMinFilter = _D3DTEXTUREMINFILTER;
  2058.  
  2059.   PD3DTextureMipFilter = ^TD3DTextureMipFilter;
  2060.   _D3DTEXTUREMIPFILTER = (
  2061.     D3DTFP_INVALID_0,
  2062.     D3DTFP_NONE   ,    // mipmapping disabled (use MAG filter)
  2063.     D3DTFP_POINT  ,    // nearest
  2064.     D3DTFP_LINEAR      // linear interpolation
  2065.   );
  2066.   {$EXTERNALSYM _D3DTEXTUREMIPFILTER}
  2067.   D3DTEXTUREMIPFILTER = _D3DTEXTUREMIPFILTER;
  2068.   {$EXTERNALSYM D3DTEXTUREMIPFILTER}
  2069.   TD3DTextureMipFilter = _D3DTEXTUREMIPFILTER;
  2070.  
  2071. {$ENDIF} // DIRECT3D_VERSION_6
  2072.  
  2073.  
  2074. (*
  2075.  * Triangle flags
  2076.  *)
  2077.  
  2078. (*
  2079.  * Tri strip and fan flags.
  2080.  * START loads all three vertices
  2081.  * EVEN and ODD load just v3 with even or odd culling
  2082.  * START_FLAT contains a count from 0 to 29 that allows the
  2083.  * whole strip or fan to be culled in one hit.
  2084.  * e.g. for a quad len = 1
  2085.  *)
  2086. const
  2087.   D3DTRIFLAG_START                        = $00000000;
  2088.   {$EXTERNALSYM D3DTRIFLAG_START}
  2089. // #define D3DTRIFLAG_STARTFLAT(len) (len)         (* 0 < len < 30 *)
  2090. function D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
  2091. {$EXTERNALSYM D3DTRIFLAG_STARTFLAT}
  2092.  
  2093. const
  2094.   D3DTRIFLAG_ODD                          = $0000001e;
  2095.   {$EXTERNALSYM D3DTRIFLAG_ODD}
  2096.   D3DTRIFLAG_EVEN                         = $0000001f;
  2097.   {$EXTERNALSYM D3DTRIFLAG_EVEN}
  2098.  
  2099. (*
  2100.  * Triangle edge flags
  2101.  * enable edges for wireframe or antialiasing
  2102.  *)
  2103.   D3DTRIFLAG_EDGEENABLE1                  = $00000100; (* v0-v1 edge *)
  2104.   {$EXTERNALSYM D3DTRIFLAG_EDGEENABLE1}
  2105.   D3DTRIFLAG_EDGEENABLE2                  = $00000200; (* v1-v2 edge *)
  2106.   {$EXTERNALSYM D3DTRIFLAG_EDGEENABLE2}
  2107.   D3DTRIFLAG_EDGEENABLE3                  = $00000400; (* v2-v0 edge *)
  2108.   {$EXTERNALSYM D3DTRIFLAG_EDGEENABLE3}
  2109.   D3DTRIFLAG_EDGEENABLETRIANGLE = (
  2110.       D3DTRIFLAG_EDGEENABLE1 or D3DTRIFLAG_EDGEENABLE2 or D3DTRIFLAG_EDGEENABLE3);
  2111.   {$EXTERNALSYM D3DTRIFLAG_EDGEENABLETRIANGLE}
  2112.  
  2113. (*
  2114.  * Primitive structures and related defines.  Vertex offsets are to types
  2115.  * TD3DVertex, TD3DLVertex, or TD3DTLVertex.
  2116.  *)
  2117.  
  2118. (*
  2119.  * Triangle list primitive structure
  2120.  *)
  2121. type
  2122.   PD3DTriangle = ^TD3DTriangle;
  2123.   _D3DTRIANGLE = packed record
  2124.     case Integer of
  2125.     0: (
  2126.       v1: WORD;            (* Vertex indices *)
  2127.       v2: WORD;
  2128.       v3: WORD;
  2129.       wFlags: WORD;        (* Edge (and other) flags *)
  2130.      );
  2131.     1: (
  2132.       wV1: WORD;
  2133.       wV2: WORD;
  2134.       wV3: WORD;
  2135.      );
  2136.   end;
  2137.   {$EXTERNALSYM _D3DTRIANGLE}
  2138.   D3DTRIANGLE = _D3DTRIANGLE;
  2139.   {$EXTERNALSYM D3DTRIANGLE}
  2140.   TD3DTriangle = _D3DTRIANGLE;
  2141.  
  2142. (*
  2143.  * Line strip structure.
  2144.  * The instruction count - 1 defines the number of line segments.
  2145.  *)
  2146.   PD3DLine = ^TD3DLine;
  2147.   _D3DLINE = packed record
  2148.     case Integer of
  2149.     0: (
  2150.       v1: WORD;            (* Vertex indices *)
  2151.       v2: WORD;
  2152.      );
  2153.     1: (
  2154.       wV1: WORD;
  2155.       wV2: WORD;
  2156.      );
  2157.   end;
  2158.   {$EXTERNALSYM _D3DLINE}
  2159.   D3DLINE = _D3DLINE;
  2160.   {$EXTERNALSYM D3DLINE}
  2161.   TD3DLine = _D3DLINE;
  2162.  
  2163. (*
  2164.  * Span structure
  2165.  * Spans join a list of points with the same y value.
  2166.  * If the y value changes, a new span is started.
  2167.  *)
  2168.   PD3DSpan = ^TD3DSpan;
  2169.   _D3DSPAN = packed record
  2170.     wCount: WORD;        (* Number of spans *)
  2171.     wFirst: WORD;        (* Index to first vertex *)
  2172.   end;
  2173.   {$EXTERNALSYM _D3DSPAN}
  2174.   D3DSPAN = _D3DSPAN;
  2175.   {$EXTERNALSYM D3DSPAN}
  2176.   TD3DSpan = _D3DSPAN;
  2177.  
  2178. (*
  2179.  * Point structure
  2180.  *)
  2181.   PD3DPoint = ^TD3DPoint;
  2182.   _D3DPOINT = packed record
  2183.     wCount: WORD;        (* number of points         *)
  2184.     wFirst: WORD;        (* index to first vertex    *)
  2185.   end;
  2186.   {$EXTERNALSYM _D3DPOINT}
  2187.   D3DPOINT = _D3DPOINT;
  2188.   {$EXTERNALSYM D3DPOINT}
  2189.   TD3DPoint = _D3DPOINT;
  2190.  
  2191. (*
  2192.  * Forward branch structure.
  2193.  * Mask is logically anded with the driver status mask
  2194.  * if the result equals 'value', the branch is taken.
  2195.  *)
  2196.   PD3DBranch = ^TD3DBranch;
  2197.   _D3DBRANCH = packed record
  2198.     dwMask: DWORD;         (* Bitmask against D3D status *)
  2199.     dwValue: DWORD;
  2200.     bNegate: BOOL;         (* TRUE to negate comparison *)
  2201.     dwOffset: DWORD;       (* How far to branch forward (0 for exit)*)
  2202.   end;
  2203.   {$EXTERNALSYM _D3DBRANCH}
  2204.   D3DBRANCH = _D3DBRANCH;
  2205.   {$EXTERNALSYM D3DBRANCH}
  2206.   TD3DBranch = _D3DBRANCH;
  2207.  
  2208. (*
  2209.  * Status used for set status instruction.
  2210.  * The D3D status is initialised on device creation
  2211.  * and is modified by all execute calls.
  2212.  *)
  2213.   PD3DStatus = ^TD3DStatus;
  2214.   _D3DSTATUS = packed record
  2215.     dwFlags: DWORD;        (* Do we set extents or status *)
  2216.     dwStatus: DWORD;       (* D3D status *)
  2217.     drExtent: TD3DRect;
  2218.   end;
  2219.   {$EXTERNALSYM _D3DSTATUS}
  2220.   D3DSTATUS = _D3DSTATUS;
  2221.   {$EXTERNALSYM D3DSTATUS}
  2222.   TD3DStatus = _D3DSTATUS;
  2223.  
  2224. const
  2225.   D3DSETSTATUS_STATUS    = $00000001;
  2226.   {$EXTERNALSYM D3DSETSTATUS_STATUS}
  2227.   D3DSETSTATUS_EXTENTS   = $00000002;
  2228.   {$EXTERNALSYM D3DSETSTATUS_EXTENTS}
  2229.   D3DSETSTATUS_ALL      = (D3DSETSTATUS_STATUS or D3DSETSTATUS_EXTENTS);
  2230.   {$EXTERNALSYM D3DSETSTATUS_ALL}
  2231.  
  2232. {$IFDEF DIRECT3D_VERSION_5}
  2233. type
  2234.   PD3DClipStatus = ^TD3DClipStatus;
  2235.   _D3DCLIPSTATUS = packed record
  2236.     dwFlags : DWORD; (* Do we set 2d extents, 3D extents or status *)
  2237.     dwStatus : DWORD; (* Clip status *)
  2238.     minx, maxx : Single; (* X extents *)
  2239.     miny, maxy : Single; (* Y extents *)
  2240.     minz, maxz : Single; (* Z extents *)
  2241.   end;
  2242.   {$EXTERNALSYM _D3DCLIPSTATUS}
  2243.   D3DCLIPSTATUS = _D3DCLIPSTATUS;
  2244.   {$EXTERNALSYM D3DCLIPSTATUS}
  2245.   TD3DClipStatus = _D3DCLIPSTATUS;
  2246.  
  2247. const
  2248.   D3DCLIPSTATUS_STATUS        = $00000001;
  2249.   {$EXTERNALSYM D3DCLIPSTATUS_STATUS}
  2250.   D3DCLIPSTATUS_EXTENTS2      = $00000002;
  2251.   {$EXTERNALSYM D3DCLIPSTATUS_EXTENTS2}
  2252.   D3DCLIPSTATUS_EXTENTS3      = $00000004;
  2253.   {$EXTERNALSYM D3DCLIPSTATUS_EXTENTS3}
  2254. {$ENDIF} // DIRECT3D_VERSION_5
  2255.  
  2256. (*
  2257.  * Statistics structure
  2258.  *)
  2259. type
  2260.   PD3DStats = ^TD3DStats;
  2261.   _D3DSTATS = packed record
  2262.     dwSize: DWORD;
  2263.     dwTrianglesDrawn: DWORD;
  2264.     dwLinesDrawn: DWORD;
  2265.     dwPointsDrawn: DWORD;
  2266.     dwSpansDrawn: DWORD;
  2267.     dwVerticesProcessed: DWORD;
  2268.   end;
  2269.   {$EXTERNALSYM _D3DSTATS}
  2270.   D3DSTATS = _D3DSTATS;
  2271.   {$EXTERNALSYM D3DSTATS}
  2272.   TD3DStats = _D3DSTATS;
  2273.  
  2274. (*
  2275.  * Execute options.
  2276.  * When calling using D3DEXECUTE_UNCLIPPED all the primitives
  2277.  * inside the buffer must be contained within the viewport.
  2278.  *)
  2279. const
  2280.   D3DEXECUTE_CLIPPED       = $00000001;
  2281.   {$EXTERNALSYM D3DEXECUTE_CLIPPED}
  2282.   D3DEXECUTE_UNCLIPPED     = $00000002;
  2283.   {$EXTERNALSYM D3DEXECUTE_UNCLIPPED}
  2284.  
  2285. type
  2286.   PD3DExecuteData = ^TD3DExecuteData;
  2287.   _D3DEXECUTEDATA = packed record
  2288.     dwSize: DWORD;
  2289.     dwVertexOffset: DWORD;
  2290.     dwVertexCount: DWORD;
  2291.     dwInstructionOffset: DWORD;
  2292.     dwInstructionLength: DWORD;
  2293.     dwHVertexOffset: DWORD;
  2294.     dsStatus: TD3DStatus;       (* Status after execute *)
  2295.   end;
  2296.   {$EXTERNALSYM _D3DEXECUTEDATA}
  2297.   D3DEXECUTEDATA = _D3DEXECUTEDATA;
  2298.   {$EXTERNALSYM D3DEXECUTEDATA}
  2299.   TD3DExecuteData = _D3DEXECUTEDATA;
  2300.  
  2301. (*
  2302.  * Palette flags.
  2303.  * This are or'ed with the peFlags in the PALETTEENTRYs passed to DirectDraw.
  2304.  *)
  2305.  
  2306. const
  2307.   D3DPAL_FREE     = $00;    (* Renderer may use this entry freely *)
  2308.   {$EXTERNALSYM D3DPAL_FREE}
  2309.   D3DPAL_READONLY = $40;    (* Renderer may not set this entry *)
  2310.   {$EXTERNALSYM D3DPAL_READONLY}
  2311.   D3DPAL_RESERVED = $80;    (* Renderer may not use this entry *)
  2312.   {$EXTERNALSYM D3DPAL_RESERVED}
  2313.  
  2314. {$IFDEF DIRECT3D_VERSION_6}
  2315.  
  2316. type
  2317.   PD3DVertexBufferDesc = ^TD3DVertexBufferDesc;
  2318.   _D3DVERTEXBUFFERDESC = packed record
  2319.     dwSize : DWORD;
  2320.     dwCaps : DWORD;
  2321.     dwFVF : DWORD;
  2322.     dwNumVertices : DWORD;
  2323.   end;
  2324.   {$EXTERNALSYM _D3DVERTEXBUFFERDESC}
  2325.   D3DVERTEXBUFFERDESC = _D3DVERTEXBUFFERDESC;
  2326.   {$EXTERNALSYM D3DVERTEXBUFFERDESC}
  2327.   TD3DVertexBufferDesc = _D3DVERTEXBUFFERDESC;
  2328.  
  2329. const
  2330. (* These correspond to DDSCAPS_* flags *)
  2331.   D3DVBCAPS_SYSTEMMEMORY      = $00000800;
  2332.   {$EXTERNALSYM D3DVBCAPS_SYSTEMMEMORY}
  2333.   D3DVBCAPS_WRITEONLY         = $00010000;
  2334.   {$EXTERNALSYM D3DVBCAPS_WRITEONLY}
  2335.   D3DVBCAPS_OPTIMIZED         = $80000000;
  2336.   {$EXTERNALSYM D3DVBCAPS_OPTIMIZED}
  2337.   D3DVBCAPS_DONOTCLIP         = $00000001;
  2338.   {$EXTERNALSYM D3DVBCAPS_DONOTCLIP}
  2339.  
  2340. (* Vertex Operations for ProcessVertices *)
  2341.   D3DVOP_LIGHT      = (1 shl 10);
  2342.   {$EXTERNALSYM D3DVOP_LIGHT}
  2343.   D3DVOP_TRANSFORM  = (1 shl 0);
  2344.   {$EXTERNALSYM D3DVOP_TRANSFORM}
  2345.   D3DVOP_CLIP       = (1 shl 2);
  2346.   {$EXTERNALSYM D3DVOP_CLIP}
  2347.   D3DVOP_EXTENTS    = (1 shl 3);
  2348.   {$EXTERNALSYM D3DVOP_EXTENTS}
  2349.  
  2350. {$IFDEF DIRECT3D_VERSION_LESS_8}
  2351.  
  2352. (* The maximum number of vertices user can pass to any d3d
  2353.    drawing function or to create vertex buffer with
  2354. *)
  2355.   D3DMAXNUMVERTICES  =  ((1 shl 16) - 1);
  2356.   {$EXTERNALSYM D3DMAXNUMVERTICES}
  2357. (* The maximum number of primitives user can pass to any d3d
  2358.    drawing function.
  2359. *)
  2360.   D3DMAXNUMPRIMITIVES = ((1 shl 16) - 1);
  2361.   {$EXTERNALSYM D3DMAXNUMPRIMITIVES}
  2362.  
  2363. {$IFDEF DIRECT3D_VERSION_7}
  2364.  
  2365. (* Bits for dwFlags in ProcessVertices call *)
  2366.   D3DPV_DONOTCOPYDATA = (1 shl 0);
  2367.   {$EXTERNALSYM D3DPV_DONOTCOPYDATA}
  2368.  
  2369. {$ENDIF} // DIRECT3D_VERSION_7
  2370. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2371.  
  2372. //-------------------------------------------------------------------
  2373.  
  2374. {$IFDEF DIRECT3D_VERSION_LESS_8}
  2375.  
  2376. // Flexible vertex format bits
  2377. //
  2378.   D3DFVF_RESERVED0        = $001;
  2379.   {$EXTERNALSYM D3DFVF_RESERVED0}
  2380.   D3DFVF_POSITION_MASK    = $00E;
  2381.   {$EXTERNALSYM D3DFVF_POSITION_MASK}
  2382.   D3DFVF_XYZ              = $002;
  2383.   {$EXTERNALSYM D3DFVF_XYZ}
  2384.   D3DFVF_XYZRHW           = $004;
  2385.   {$EXTERNALSYM D3DFVF_XYZRHW}
  2386. {$IFDEF DIRECT3D_VERSION_7}
  2387.   D3DFVF_XYZB1            = $006;
  2388.   {$EXTERNALSYM D3DFVF_XYZB1}
  2389.   D3DFVF_XYZB2            = $008;
  2390.   {$EXTERNALSYM D3DFVF_XYZB2}
  2391.   D3DFVF_XYZB3            = $00a;
  2392.   {$EXTERNALSYM D3DFVF_XYZB3}
  2393.   D3DFVF_XYZB4            = $00c;
  2394.   {$EXTERNALSYM D3DFVF_XYZB4}
  2395.   D3DFVF_XYZB5            = $00e;
  2396.   {$EXTERNALSYM D3DFVF_XYZB5}
  2397.  
  2398. {$ENDIF} // DIRECT3D_VERSION_7
  2399.   D3DFVF_NORMAL           = $010;
  2400.   {$EXTERNALSYM D3DFVF_NORMAL}
  2401.   D3DFVF_RESERVED1        = $020;
  2402.   {$EXTERNALSYM D3DFVF_RESERVED1}
  2403.   D3DFVF_DIFFUSE          = $040;
  2404.   {$EXTERNALSYM D3DFVF_DIFFUSE}
  2405.   D3DFVF_SPECULAR         = $080;
  2406.   {$EXTERNALSYM D3DFVF_SPECULAR}
  2407.  
  2408.   D3DFVF_TEXCOUNT_MASK    = $f00;
  2409.   {$EXTERNALSYM D3DFVF_TEXCOUNT_MASK}
  2410.   D3DFVF_TEXCOUNT_SHIFT   = 8;
  2411.   {$EXTERNALSYM D3DFVF_TEXCOUNT_SHIFT}
  2412.   D3DFVF_TEX0             = $000;
  2413.   {$EXTERNALSYM D3DFVF_TEX0}
  2414.   D3DFVF_TEX1             = $100;
  2415.   {$EXTERNALSYM D3DFVF_TEX1}
  2416.   D3DFVF_TEX2             = $200;
  2417.   {$EXTERNALSYM D3DFVF_TEX2}
  2418.   D3DFVF_TEX3             = $300;
  2419.   {$EXTERNALSYM D3DFVF_TEX3}
  2420.   D3DFVF_TEX4             = $400;
  2421.   {$EXTERNALSYM D3DFVF_TEX4}
  2422.   D3DFVF_TEX5             = $500;
  2423.   {$EXTERNALSYM D3DFVF_TEX5}
  2424.   D3DFVF_TEX6             = $600;
  2425.   {$EXTERNALSYM D3DFVF_TEX6}
  2426.   D3DFVF_TEX7             = $700;
  2427.   {$EXTERNALSYM D3DFVF_TEX7}
  2428.   D3DFVF_TEX8             = $800;
  2429.   {$EXTERNALSYM D3DFVF_TEX8}
  2430.  
  2431.   D3DFVF_RESERVED2        = $f000;  // 4 reserved bits
  2432.   {$EXTERNALSYM D3DFVF_RESERVED2}
  2433.  
  2434. {$ELSE}
  2435.   D3DFVF_RESERVED1        = $020;
  2436.   {$EXTERNALSYM D3DFVF_RESERVED1}
  2437. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2438.  
  2439.   D3DFVF_VERTEX = ( D3DFVF_XYZ or D3DFVF_NORMAL or D3DFVF_TEX1 );
  2440.   {$EXTERNALSYM D3DFVF_VERTEX}
  2441.   D3DFVF_LVERTEX = ( D3DFVF_XYZ or D3DFVF_RESERVED1 or D3DFVF_DIFFUSE or
  2442.                          D3DFVF_SPECULAR or D3DFVF_TEX1 );
  2443.   {$EXTERNALSYM D3DFVF_LVERTEX}
  2444.   D3DFVF_TLVERTEX = ( D3DFVF_XYZRHW or D3DFVF_DIFFUSE or D3DFVF_SPECULAR or
  2445.                           D3DFVF_TEX1 );
  2446.   {$EXTERNALSYM D3DFVF_TLVERTEX}
  2447.  
  2448. type
  2449.   PD3DDP_PtrStride = ^TD3DDP_PtrStride;
  2450.   _D3DDP_PTRSTRIDE = packed record
  2451.     lpvData : pointer;
  2452.     dwStride : DWORD;
  2453.   end;
  2454.   {$EXTERNALSYM _D3DDP_PTRSTRIDE}
  2455.   D3DDP_PTRSTRIDE = _D3DDP_PTRSTRIDE;
  2456.   {$EXTERNALSYM D3DDP_PTRSTRIDE}
  2457.   TD3DDP_PtrStride = _D3DDP_PTRSTRIDE;
  2458.   TD3DDPPtrStride = _D3DDP_PTRSTRIDE;
  2459.   PD3DDPPtrStride = ^TD3DDPPtrStride;
  2460.  
  2461. const
  2462.   D3DDP_MAXTEXCOORD = 8;
  2463.   {$EXTERNALSYM D3DDP_MAXTEXCOORD}
  2464.  
  2465. type
  2466.   PD3DDrawPrimitiveStridedData = ^TD3DDrawPrimitiveStridedData;
  2467.   _D3DDRAWPRIMITIVESTRIDEDDATA = packed record
  2468.     position : TD3DDP_PtrStride;
  2469.     normal : TD3DDP_PtrStride;
  2470.     diffuse : TD3DDP_PtrStride;
  2471.     specular : TD3DDP_PtrStride;
  2472.     textureCoords : array [0..D3DDP_MAXTEXCOORD-1] of TD3DDP_PtrStride;
  2473.   end;
  2474.   {$EXTERNALSYM _D3DDRAWPRIMITIVESTRIDEDDATA}
  2475.   D3DDRAWPRIMITIVESTRIDEDDATA = _D3DDRAWPRIMITIVESTRIDEDDATA;
  2476.   {$EXTERNALSYM D3DDRAWPRIMITIVESTRIDEDDATA}
  2477.   TD3DDrawPrimitiveStridedData = _D3DDRAWPRIMITIVESTRIDEDDATA;
  2478.  
  2479. //---------------------------------------------------------------------
  2480. // ComputeSphereVisibility return values
  2481. //
  2482. const
  2483.   D3DVIS_INSIDE_FRUSTUM      = 0;
  2484.   {$EXTERNALSYM D3DVIS_INSIDE_FRUSTUM}
  2485.   D3DVIS_INTERSECT_FRUSTUM   = 1;
  2486.   {$EXTERNALSYM D3DVIS_INTERSECT_FRUSTUM}
  2487.   D3DVIS_OUTSIDE_FRUSTUM     = 2;
  2488.   {$EXTERNALSYM D3DVIS_OUTSIDE_FRUSTUM}
  2489.   D3DVIS_INSIDE_LEFT         = 0;
  2490.   {$EXTERNALSYM D3DVIS_INSIDE_LEFT}
  2491.   D3DVIS_INTERSECT_LEFT      = (1 shl 2);
  2492.   {$EXTERNALSYM D3DVIS_INTERSECT_LEFT}
  2493.   D3DVIS_OUTSIDE_LEFT        = (2 shl 2);
  2494.   {$EXTERNALSYM D3DVIS_OUTSIDE_LEFT}
  2495.   D3DVIS_INSIDE_RIGHT        = 0;
  2496.   {$EXTERNALSYM D3DVIS_INSIDE_RIGHT}
  2497.   D3DVIS_INTERSECT_RIGHT     = (1 shl 4);
  2498.   {$EXTERNALSYM D3DVIS_INTERSECT_RIGHT}
  2499.   D3DVIS_OUTSIDE_RIGHT       = (2 shl 4);
  2500.   {$EXTERNALSYM D3DVIS_OUTSIDE_RIGHT}
  2501.   D3DVIS_INSIDE_TOP          = 0;
  2502.   {$EXTERNALSYM D3DVIS_INSIDE_TOP}
  2503.   D3DVIS_INTERSECT_TOP       = (1 shl 6);
  2504.   {$EXTERNALSYM D3DVIS_INTERSECT_TOP}
  2505.   D3DVIS_OUTSIDE_TOP         = (2 shl 6);
  2506.   {$EXTERNALSYM D3DVIS_OUTSIDE_TOP}
  2507.   D3DVIS_INSIDE_BOTTOM       = 0;
  2508.   {$EXTERNALSYM D3DVIS_INSIDE_BOTTOM}
  2509.   D3DVIS_INTERSECT_BOTTOM    = (1 shl 8);
  2510.   {$EXTERNALSYM D3DVIS_INTERSECT_BOTTOM}
  2511.   D3DVIS_OUTSIDE_BOTTOM      = (2 shl 8);
  2512.   {$EXTERNALSYM D3DVIS_OUTSIDE_BOTTOM}
  2513.   D3DVIS_INSIDE_NEAR         = 0;
  2514.   {$EXTERNALSYM D3DVIS_INSIDE_NEAR}
  2515.   D3DVIS_INTERSECT_NEAR      = (1 shl 10);
  2516.   {$EXTERNALSYM D3DVIS_INTERSECT_NEAR}
  2517.   D3DVIS_OUTSIDE_NEAR        = (2 shl 10);
  2518.   {$EXTERNALSYM D3DVIS_OUTSIDE_NEAR}
  2519.   D3DVIS_INSIDE_FAR          = 0;
  2520.   {$EXTERNALSYM D3DVIS_INSIDE_FAR}
  2521.   D3DVIS_INTERSECT_FAR       = (1 shl 12);
  2522.   {$EXTERNALSYM D3DVIS_INTERSECT_FAR}
  2523.   D3DVIS_OUTSIDE_FAR         = (2 shl 12);
  2524.   {$EXTERNALSYM D3DVIS_OUTSIDE_FAR}
  2525.  
  2526.   D3DVIS_MASK_FRUSTUM        = (3 shl 0);
  2527.   {$EXTERNALSYM D3DVIS_MASK_FRUSTUM}
  2528.   D3DVIS_MASK_LEFT           = (3 shl 2);
  2529.   {$EXTERNALSYM D3DVIS_MASK_LEFT}
  2530.   D3DVIS_MASK_RIGHT          = (3 shl 4);
  2531.   {$EXTERNALSYM D3DVIS_MASK_RIGHT}
  2532.   D3DVIS_MASK_TOP            = (3 shl 6);
  2533.   {$EXTERNALSYM D3DVIS_MASK_TOP}
  2534.   D3DVIS_MASK_BOTTOM         = (3 shl 8);
  2535.   {$EXTERNALSYM D3DVIS_MASK_BOTTOM}
  2536.   D3DVIS_MASK_NEAR           = (3 shl 10);
  2537.   {$EXTERNALSYM D3DVIS_MASK_NEAR}
  2538.   D3DVIS_MASK_FAR            = (3 shl 12);
  2539.   {$EXTERNALSYM D3DVIS_MASK_FAR}
  2540.  
  2541. {$ENDIF} // DIRECT3D_VERSION_6
  2542.  
  2543. {$IFDEF DIRECT3D_VERSION_LESS_8}
  2544. {$IFDEF DIRECT3D_VERSION_7}
  2545.  
  2546. // To be used with GetInfo()
  2547.   D3DDEVINFOID_TEXTUREMANAGER    = 1;
  2548.   {$EXTERNALSYM D3DDEVINFOID_TEXTUREMANAGER}
  2549.   D3DDEVINFOID_D3DTEXTUREMANAGER = 2;
  2550.   {$EXTERNALSYM D3DDEVINFOID_D3DTEXTUREMANAGER}
  2551.   D3DDEVINFOID_TEXTURING         = 3;
  2552.   {$EXTERNALSYM D3DDEVINFOID_TEXTURING}
  2553.  
  2554. type
  2555.   PD3DStateBlockType = ^TD3DStateBlockType;
  2556.   _D3DSTATEBLOCKTYPE = (
  2557.     D3DSBT_INVALID_0   ,
  2558.     D3DSBT_ALL         , // capture all state
  2559.     D3DSBT_PIXELSTATE  , // capture pixel state
  2560.     D3DSBT_VERTEXSTATE   // capture vertex state
  2561.   );
  2562.   {$EXTERNALSYM _D3DSTATEBLOCKTYPE}
  2563.   D3DSTATEBLOCKTYPE = _D3DSTATEBLOCKTYPE;
  2564.   {$EXTERNALSYM D3DSTATEBLOCKTYPE}
  2565.   TD3DStateBlockType = _D3DSTATEBLOCKTYPE;
  2566.  
  2567. // The D3DVERTEXBLENDFLAGS type is used with D3DRENDERSTATE_VERTEXBLEND state.
  2568. //
  2569.   PD3DVertexBlendFlags = ^TD3DVertexBlendFlags;
  2570.   _D3DVERTEXBLENDFLAGS = (
  2571.     D3DVBLEND_DISABLE , // Disable vertex blending
  2572.     D3DVBLEND_1WEIGHT , // blend between 2 matrices
  2573.     D3DVBLEND_2WEIGHTS, // blend between 3 matrices
  2574.     D3DVBLEND_3WEIGHTS  // blend between 4 matrices
  2575.   );
  2576.   {$EXTERNALSYM _D3DVERTEXBLENDFLAGS}
  2577.   D3DVERTEXBLENDFLAGS = _D3DVERTEXBLENDFLAGS;
  2578.   {$EXTERNALSYM D3DVERTEXBLENDFLAGS}
  2579.   TD3DVertexBlendFlags = _D3DVERTEXBLENDFLAGS;
  2580.  
  2581.   PD3DTextureTransformFlags = ^TD3DTextureTransformFlags;
  2582.   _D3DTEXTURETRANSFORMFLAGS = (
  2583.     D3DTTFF_DISABLE ,    // texture coordinates are passed directly
  2584.     D3DTTFF_COUNT1  ,    // rasterizer should expect 1-D texture coords
  2585.     D3DTTFF_COUNT2  ,    // rasterizer should expect 2-D texture coords
  2586.     D3DTTFF_COUNT3  ,    // rasterizer should expect 3-D texture coords
  2587.     D3DTTFF_COUNT4       // rasterizer should expect 4-D texture coords
  2588.   );
  2589.   {$EXTERNALSYM _D3DTEXTURETRANSFORMFLAGS}
  2590.   D3DTEXTURETRANSFORMFLAGS = _D3DTEXTURETRANSFORMFLAGS;
  2591.   {$EXTERNALSYM D3DTEXTURETRANSFORMFLAGS}
  2592.   TD3DTextureTransformFlags = _D3DTEXTURETRANSFORMFLAGS;
  2593.  
  2594. const
  2595.   D3DTTFF_PROJECTED       = TD3DTextureTransformFlags(256); // texcoords to be divided by COUNTth element
  2596.   {$EXTERNALSYM D3DTTFF_PROJECTED}
  2597.  
  2598. // Macros to set texture coordinate format bits in the FVF id
  2599.  
  2600.   D3DFVF_TEXTUREFORMAT2 = 0;         // Two floating point values
  2601.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT2}
  2602.   D3DFVF_TEXTUREFORMAT1 = 3;         // One floating point value
  2603.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT1}
  2604.   D3DFVF_TEXTUREFORMAT3 = 1;         // Three floating point values
  2605.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT3}
  2606.   D3DFVF_TEXTUREFORMAT4 = 2;         // Four floating point values
  2607.   {$EXTERNALSYM D3DFVF_TEXTUREFORMAT4}
  2608.  
  2609. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWORD): DWORD;
  2610. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE3}
  2611. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWORD): DWORD;
  2612. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE2}
  2613. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWORD): DWORD;
  2614. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE4}
  2615. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWORD): DWORD;
  2616. {$EXTERNALSYM D3DFVF_TEXCOORDSIZE1}
  2617.  
  2618. {$ENDIF} // DIRECT3D_VERSION_7
  2619. {$ELSE}
  2620. //
  2621. // legacy vertex blend names
  2622. //
  2623. type
  2624.   PD3DVertexBlendFlags = ^TD3DVertexBlendFlags;
  2625.   TD3DVertexBlendFlags = Direct3D8.TD3DVertexBlendFlags;
  2626.   D3DVERTEXBLENDFLAGS = Direct3D8.D3DVERTEXBLENDFLAGS;
  2627.   _D3DVERTEXBLENDFLAGS = Direct3D8._D3DVERTEXBLENDFLAGS;
  2628.  
  2629. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  2630.  
  2631.  
  2632. (*==========================================================================;
  2633.  *
  2634.  *
  2635.  *  File:       d3dcaps.h
  2636.  *  Content:    Direct3D capabilities include file
  2637.  *
  2638.  ***************************************************************************)
  2639.  
  2640. (* Description of capabilities of transform *)
  2641.  
  2642. type
  2643.   PD3DTransformCaps = ^TD3DTransformCaps;
  2644.   _D3DTRANSFORMCAPS = packed record
  2645.     dwSize: DWORD;
  2646.     dwCaps: DWORD;
  2647.   end;
  2648.   {$EXTERNALSYM _D3DTRANSFORMCAPS}
  2649.   D3DTRANSFORMCAPS = _D3DTRANSFORMCAPS;
  2650.   {$EXTERNALSYM D3DTRANSFORMCAPS}
  2651.   TD3DTransformCaps = _D3DTRANSFORMCAPS;
  2652.  
  2653. const
  2654.   D3DTRANSFORMCAPS_CLIP         = $00000001; (* Will clip whilst transforming *)
  2655.   {$EXTERNALSYM D3DTRANSFORMCAPS_CLIP}
  2656.  
  2657. (* Description of capabilities of lighting *)
  2658.  
  2659. type
  2660.   PD3DLightingCaps = ^TD3DLightingCaps;
  2661.   _D3DLIGHTINGCAPS = packed record
  2662.     dwSize: DWORD;
  2663.     dwCaps: DWORD;                   (* Lighting caps *)
  2664.     dwLightingModel: DWORD;          (* Lighting model - RGB or mono *)
  2665.     dwNumLights: DWORD;              (* Number of lights that can be handled *)
  2666.   end;
  2667.   {$EXTERNALSYM _D3DLIGHTINGCAPS}
  2668.   D3DLIGHTINGCAPS = _D3DLIGHTINGCAPS;
  2669.   {$EXTERNALSYM D3DLIGHTINGCAPS}
  2670.   TD3DLightingCaps = _D3DLIGHTINGCAPS;
  2671.  
  2672. const
  2673.   D3DLIGHTINGMODEL_RGB            = $00000001;
  2674.   {$EXTERNALSYM D3DLIGHTINGMODEL_RGB}
  2675.   D3DLIGHTINGMODEL_MONO           = $00000002;
  2676.   {$EXTERNALSYM D3DLIGHTINGMODEL_MONO}
  2677.  
  2678.   D3DLIGHTCAPS_POINT              = $00000001; (* Point lights supported *)
  2679.   {$EXTERNALSYM D3DLIGHTCAPS_POINT}
  2680.   D3DLIGHTCAPS_SPOT               = $00000002; (* Spot lights supported *)
  2681.   {$EXTERNALSYM D3DLIGHTCAPS_SPOT}
  2682.   D3DLIGHTCAPS_DIRECTIONAL        = $00000004; (* Directional lights supported *)
  2683.   {$EXTERNALSYM D3DLIGHTCAPS_DIRECTIONAL}
  2684. {$IFDEF DIRECT3D_VERSION_LESS_7}
  2685.   D3DLIGHTCAPS_PARALLELPOINT      = $00000008; (* Parallel point lights supported *)
  2686.   {$EXTERNALSYM D3DLIGHTCAPS_PARALLELPOINT}
  2687. {$ENDIF} // DIRECT3D_VERSION_LESS_7
  2688. {$IFDEF DIRECT3D_VERSION_LESS_5}
  2689.   D3DLIGHTCAPS_GLSPOT             = $00000010; (* GL syle spot lights supported *)
  2690.   {$EXTERNALSYM D3DLIGHTCAPS_GLSPOT}
  2691. {$ENDIF} // DIRECT3D_VERSION_LESS_5
  2692.  
  2693. (* Description of capabilities for each primitive type *)
  2694.  
  2695. type
  2696.   PD3DPrimCaps = ^TD3DPrimCaps;
  2697.   _D3DPrimCaps = packed record
  2698.     dwSize: DWORD;
  2699.     dwMiscCaps: DWORD;                 (* Capability flags *)
  2700.     dwRasterCaps: DWORD;
  2701.     dwZCmpCaps: DWORD;
  2702.     dwSrcBlendCaps: DWORD;
  2703.     dwDestBlendCaps: DWORD;
  2704.     dwAlphaCmpCaps: DWORD;
  2705.     dwShadeCaps: DWORD;
  2706.     dwTextureCaps: DWORD;
  2707.     dwTextureFilterCaps: DWORD;
  2708.     dwTextureBlendCaps: DWORD;
  2709.     dwTextureAddressCaps: DWORD;
  2710.     dwStippleWidth: DWORD;             (* maximum width and height of *)
  2711.     dwStippleHeight: DWORD;            (* of supported stipple (up to 32x32) *)
  2712.   end;
  2713.   {$EXTERNALSYM _D3DPrimCaps}
  2714.   D3DPrimCaps = _D3DPrimCaps;
  2715.   {$EXTERNALSYM D3DPrimCaps}
  2716.   TD3DPrimCaps = _D3DPrimCaps;
  2717.  
  2718. const
  2719. (* TD3DPrimCaps dwMiscCaps *)
  2720.  
  2721.   D3DPMISCCAPS_MASKPLANES         = $00000001;
  2722.   {$EXTERNALSYM D3DPMISCCAPS_MASKPLANES}
  2723.   D3DPMISCCAPS_MASKZ              = $00000002;
  2724.   {$EXTERNALSYM D3DPMISCCAPS_MASKZ}
  2725.   D3DPMISCCAPS_LINEPATTERNREP     = $00000004;
  2726.   {$EXTERNALSYM D3DPMISCCAPS_LINEPATTERNREP}
  2727.   D3DPMISCCAPS_CONFORMANT         = $00000008;
  2728.   {$EXTERNALSYM D3DPMISCCAPS_CONFORMANT}
  2729.   D3DPMISCCAPS_CULLNONE           = $00000010;
  2730.   {$EXTERNALSYM D3DPMISCCAPS_CULLNONE}
  2731.   D3DPMISCCAPS_CULLCW             = $00000020;
  2732.   {$EXTERNALSYM D3DPMISCCAPS_CULLCW}
  2733.   D3DPMISCCAPS_CULLCCW            = $00000040;
  2734.   {$EXTERNALSYM D3DPMISCCAPS_CULLCCW}
  2735.  
  2736. (* TD3DPrimCaps dwRasterCaps *)
  2737.  
  2738.   D3DPRASTERCAPS_DITHER           = $00000001;
  2739.   {$EXTERNALSYM D3DPRASTERCAPS_DITHER}
  2740.   D3DPRASTERCAPS_ROP2             = $00000002;
  2741.   {$EXTERNALSYM D3DPRASTERCAPS_ROP2}
  2742.   D3DPRASTERCAPS_XOR              = $00000004;
  2743.   {$EXTERNALSYM D3DPRASTERCAPS_XOR}
  2744.   D3DPRASTERCAPS_PAT              = $00000008;
  2745.   {$EXTERNALSYM D3DPRASTERCAPS_PAT}
  2746.   D3DPRASTERCAPS_ZTEST            = $00000010;
  2747.   {$EXTERNALSYM D3DPRASTERCAPS_ZTEST}
  2748.   D3DPRASTERCAPS_SUBPIXEL         = $00000020;
  2749.   {$EXTERNALSYM D3DPRASTERCAPS_SUBPIXEL}
  2750.   D3DPRASTERCAPS_SUBPIXELX        = $00000040;
  2751.   {$EXTERNALSYM D3DPRASTERCAPS_SUBPIXELX}
  2752.   D3DPRASTERCAPS_FOGVERTEX        = $00000080;
  2753.   {$EXTERNALSYM D3DPRASTERCAPS_FOGVERTEX}
  2754.   D3DPRASTERCAPS_FOGTABLE         = $00000100;
  2755.   {$EXTERNALSYM D3DPRASTERCAPS_FOGTABLE}
  2756.   D3DPRASTERCAPS_STIPPLE          = $00000200;
  2757.   {$EXTERNALSYM D3DPRASTERCAPS_STIPPLE}
  2758. {$IFDEF DIRECT3D_VERSION_5}
  2759.   D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT   = $00000400;
  2760.   {$EXTERNALSYM D3DPRASTERCAPS_ANTIALIASSORTDEPENDENT}
  2761.   D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT = $00000800;
  2762.   {$EXTERNALSYM D3DPRASTERCAPS_ANTIALIASSORTINDEPENDENT}
  2763.   D3DPRASTERCAPS_ANTIALIASEDGES           = $00001000;
  2764.   {$EXTERNALSYM D3DPRASTERCAPS_ANTIALIASEDGES}
  2765.   D3DPRASTERCAPS_MIPMAPLODBIAS            = $00002000;
  2766.   {$EXTERNALSYM D3DPRASTERCAPS_MIPMAPLODBIAS}
  2767.   D3DPRASTERCAPS_ZBIAS                    = $00004000;
  2768.   {$EXTERNALSYM D3DPRASTERCAPS_ZBIAS}
  2769.   D3DPRASTERCAPS_ZBUFFERLESSHSR           = $00008000;
  2770.   {$EXTERNALSYM D3DPRASTERCAPS_ZBUFFERLESSHSR}
  2771.   D3DPRASTERCAPS_FOGRANGE                 = $00010000;
  2772.   {$EXTERNALSYM D3DPRASTERCAPS_FOGRANGE}
  2773.   D3DPRASTERCAPS_ANISOTROPY               = $00020000;
  2774.   {$EXTERNALSYM D3DPRASTERCAPS_ANISOTROPY}
  2775. {$ENDIF} // DIRECT3D_VERSION_5
  2776. {$IFDEF DIRECT3D_VERSION_6}
  2777.   D3DPRASTERCAPS_WBUFFER                      = $00040000;
  2778.   {$EXTERNALSYM D3DPRASTERCAPS_WBUFFER}
  2779.   D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT   = $00080000;
  2780.   {$EXTERNALSYM D3DPRASTERCAPS_TRANSLUCENTSORTINDEPENDENT}
  2781.   D3DPRASTERCAPS_WFOG                         = $00100000;
  2782.   {$EXTERNALSYM D3DPRASTERCAPS_WFOG}
  2783.   D3DPRASTERCAPS_ZFOG                         = $00200000;
  2784.   {$EXTERNALSYM D3DPRASTERCAPS_ZFOG}
  2785. {$ENDIF} // DIRECT3D_VERSION_6
  2786.  
  2787. (* TD3DPrimCaps dwZCmpCaps, dwAlphaCmpCaps *)
  2788.  
  2789. const
  2790.   D3DPCMPCAPS_NEVER               = $00000001;
  2791.   {$EXTERNALSYM D3DPCMPCAPS_NEVER}
  2792.   D3DPCMPCAPS_LESS                = $00000002;
  2793.   {$EXTERNALSYM D3DPCMPCAPS_LESS}
  2794.   D3DPCMPCAPS_EQUAL               = $00000004;
  2795.   {$EXTERNALSYM D3DPCMPCAPS_EQUAL}
  2796.   D3DPCMPCAPS_LESSEQUAL           = $00000008;
  2797.   {$EXTERNALSYM D3DPCMPCAPS_LESSEQUAL}
  2798.   D3DPCMPCAPS_GREATER             = $00000010;
  2799.   {$EXTERNALSYM D3DPCMPCAPS_GREATER}
  2800.   D3DPCMPCAPS_NOTEQUAL            = $00000020;
  2801.   {$EXTERNALSYM D3DPCMPCAPS_NOTEQUAL}
  2802.   D3DPCMPCAPS_GREATEREQUAL        = $00000040;
  2803.   {$EXTERNALSYM D3DPCMPCAPS_GREATEREQUAL}
  2804.   D3DPCMPCAPS_ALWAYS              = $00000080;
  2805.   {$EXTERNALSYM D3DPCMPCAPS_ALWAYS}
  2806.  
  2807. (* TD3DPrimCaps dwSourceBlendCaps, dwDestBlendCaps *)
  2808.  
  2809.   D3DPBLENDCAPS_ZERO              = $00000001;
  2810.   {$EXTERNALSYM D3DPBLENDCAPS_ZERO}
  2811.   D3DPBLENDCAPS_ONE               = $00000002;
  2812.   {$EXTERNALSYM D3DPBLENDCAPS_ONE}
  2813.   D3DPBLENDCAPS_SRCCOLOR          = $00000004;
  2814.   {$EXTERNALSYM D3DPBLENDCAPS_SRCCOLOR}
  2815.   D3DPBLENDCAPS_INVSRCCOLOR       = $00000008;
  2816.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCCOLOR}
  2817.   D3DPBLENDCAPS_SRCALPHA          = $00000010;
  2818.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHA}
  2819.   D3DPBLENDCAPS_INVSRCALPHA       = $00000020;
  2820.   {$EXTERNALSYM D3DPBLENDCAPS_INVSRCALPHA}
  2821.   D3DPBLENDCAPS_DESTALPHA         = $00000040;
  2822.   {$EXTERNALSYM D3DPBLENDCAPS_DESTALPHA}
  2823.   D3DPBLENDCAPS_INVDESTALPHA      = $00000080;
  2824.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTALPHA}
  2825.   D3DPBLENDCAPS_DESTCOLOR         = $00000100;
  2826.   {$EXTERNALSYM D3DPBLENDCAPS_DESTCOLOR}
  2827.   D3DPBLENDCAPS_INVDESTCOLOR      = $00000200;
  2828.   {$EXTERNALSYM D3DPBLENDCAPS_INVDESTCOLOR}
  2829.   D3DPBLENDCAPS_SRCALPHASAT       = $00000400;
  2830.   {$EXTERNALSYM D3DPBLENDCAPS_SRCALPHASAT}
  2831.   D3DPBLENDCAPS_BOTHSRCALPHA      = $00000800;
  2832.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHSRCALPHA}
  2833.   D3DPBLENDCAPS_BOTHINVSRCALPHA   = $00001000;
  2834.   {$EXTERNALSYM D3DPBLENDCAPS_BOTHINVSRCALPHA}
  2835.  
  2836. (* TD3DPrimCaps dwShadeCaps *)
  2837.  
  2838.   D3DPSHADECAPS_COLORFLATMONO             = $00000001;
  2839.   {$EXTERNALSYM D3DPSHADECAPS_COLORFLATMONO}
  2840.   D3DPSHADECAPS_COLORFLATRGB              = $00000002;
  2841.   {$EXTERNALSYM D3DPSHADECAPS_COLORFLATRGB}
  2842.   D3DPSHADECAPS_COLORGOURAUDMONO          = $00000004;
  2843.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDMONO}
  2844.   D3DPSHADECAPS_COLORGOURAUDRGB           = $00000008;
  2845.   {$EXTERNALSYM D3DPSHADECAPS_COLORGOURAUDRGB}
  2846.   D3DPSHADECAPS_COLORPHONGMONO            = $00000010;
  2847.   {$EXTERNALSYM D3DPSHADECAPS_COLORPHONGMONO}
  2848.   D3DPSHADECAPS_COLORPHONGRGB             = $00000020;
  2849.   {$EXTERNALSYM D3DPSHADECAPS_COLORPHONGRGB}
  2850.  
  2851.   D3DPSHADECAPS_SPECULARFLATMONO          = $00000040;
  2852.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARFLATMONO}
  2853.   D3DPSHADECAPS_SPECULARFLATRGB           = $00000080;
  2854.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARFLATRGB}
  2855.   D3DPSHADECAPS_SPECULARGOURAUDMONO       = $00000100;
  2856.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDMONO}
  2857.   D3DPSHADECAPS_SPECULARGOURAUDRGB        = $00000200;
  2858.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARGOURAUDRGB}
  2859.   D3DPSHADECAPS_SPECULARPHONGMONO         = $00000400;
  2860.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARPHONGMONO}
  2861.   D3DPSHADECAPS_SPECULARPHONGRGB          = $00000800;
  2862.   {$EXTERNALSYM D3DPSHADECAPS_SPECULARPHONGRGB}
  2863.  
  2864.   D3DPSHADECAPS_ALPHAFLATBLEND            = $00001000;
  2865.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAFLATBLEND}
  2866.   D3DPSHADECAPS_ALPHAFLATSTIPPLED         = $00002000;
  2867.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAFLATSTIPPLED}
  2868.   D3DPSHADECAPS_ALPHAGOURAUDBLEND         = $00004000;
  2869.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDBLEND}
  2870.   D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED      = $00008000;
  2871.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAGOURAUDSTIPPLED}
  2872.   D3DPSHADECAPS_ALPHAPHONGBLEND           = $00010000;
  2873.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAPHONGBLEND}
  2874.   D3DPSHADECAPS_ALPHAPHONGSTIPPLED        = $00020000;
  2875.   {$EXTERNALSYM D3DPSHADECAPS_ALPHAPHONGSTIPPLED}
  2876.  
  2877.   D3DPSHADECAPS_FOGFLAT                   = $00040000;
  2878.   {$EXTERNALSYM D3DPSHADECAPS_FOGFLAT}
  2879.   D3DPSHADECAPS_FOGGOURAUD                = $00080000;
  2880.   {$EXTERNALSYM D3DPSHADECAPS_FOGGOURAUD}
  2881.   D3DPSHADECAPS_FOGPHONG                  = $00100000;
  2882.   {$EXTERNALSYM D3DPSHADECAPS_FOGPHONG}
  2883.  
  2884. (* TD3DPrimCaps dwTextureCaps *)
  2885.  
  2886. (*
  2887.  * Perspective-correct texturing is supported
  2888.  *)
  2889.   D3DPTEXTURECAPS_PERSPECTIVE     = $00000001;
  2890.   {$EXTERNALSYM D3DPTEXTURECAPS_PERSPECTIVE}
  2891.  
  2892. (*
  2893.  * Power-of-2 texture dimensions are required
  2894.  *)
  2895.   D3DPTEXTURECAPS_POW2            = $00000002;
  2896.   {$EXTERNALSYM D3DPTEXTURECAPS_POW2}
  2897.  
  2898. (*
  2899.  * Alpha in texture pixels is supported
  2900.  *)
  2901.   D3DPTEXTURECAPS_ALPHA           = $00000004;
  2902.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHA}
  2903.  
  2904. (*
  2905.  * Color-keyed textures are supported
  2906.  *)
  2907.   D3DPTEXTURECAPS_TRANSPARENCY    = $00000008;
  2908.   {$EXTERNALSYM D3DPTEXTURECAPS_TRANSPARENCY}
  2909.  
  2910. (*
  2911.  * obsolete, see D3DPTADDRESSCAPS_BORDER
  2912.  *)
  2913.   D3DPTEXTURECAPS_BORDER          = $00000010;
  2914.   {$EXTERNALSYM D3DPTEXTURECAPS_BORDER}
  2915.  
  2916. (*
  2917.  * Only square textures are supported
  2918.  *)
  2919.   D3DPTEXTURECAPS_SQUAREONLY      = $00000020;
  2920.   {$EXTERNALSYM D3DPTEXTURECAPS_SQUAREONLY}
  2921.  
  2922. {$IFDEF DIRECT3D_VERSION_6}
  2923. (*
  2924.  * Texture indices are not scaled by the texture size prior
  2925.  * to interpolation.
  2926.  *)
  2927.   D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = $00000040;
  2928.   {$EXTERNALSYM D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE}
  2929.  
  2930. (*
  2931.  * Device can draw alpha from texture palettes
  2932.  *)
  2933.   D3DPTEXTURECAPS_ALPHAPALETTE    = $00000080;
  2934.   {$EXTERNALSYM D3DPTEXTURECAPS_ALPHAPALETTE}
  2935.  
  2936. (*
  2937.  * Device can use non-POW2 textures if:
  2938.  *  1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage
  2939.  *  2) D3DRS_WRAP(N) is zero for this texture's coordinates
  2940.  *  3) mip mapping is not enabled (use magnification filter only)
  2941.  *)
  2942.   D3DPTEXTURECAPS_NONPOW2CONDITIONAL  = $00000100;
  2943.   {$EXTERNALSYM D3DPTEXTURECAPS_NONPOW2CONDITIONAL}
  2944. {$ENDIF} // DIRECT3D_VERSION_6
  2945.  
  2946. {$IFDEF DIRECT3D_VERSION_7}
  2947. // 0x00000200L unused
  2948.  
  2949. (*
  2950.  * Device can divide transformed texture coordinates by the
  2951.  * COUNTth texture coordinate (can do D3DTTFF_PROJECTED)
  2952.  *)
  2953.   D3DPTEXTURECAPS_PROJECTED  = $00000400;
  2954.   {$EXTERNALSYM D3DPTEXTURECAPS_PROJECTED}
  2955.  
  2956. (*
  2957.  * Device can do cubemap textures
  2958.  *)
  2959.   D3DPTEXTURECAPS_CUBEMAP           = $00000800;
  2960.   {$EXTERNALSYM D3DPTEXTURECAPS_CUBEMAP}
  2961.  
  2962.   D3DPTEXTURECAPS_COLORKEYBLEND     = $00001000;
  2963.   {$EXTERNALSYM D3DPTEXTURECAPS_COLORKEYBLEND}
  2964. {$ENDIF} // DIRECT3D_VERSION_7
  2965.  
  2966.  
  2967. (* TD3DPrimCaps dwTextureFilterCaps *)
  2968.  
  2969.   D3DPTFILTERCAPS_NEAREST         = $00000001;
  2970.   {$EXTERNALSYM D3DPTFILTERCAPS_NEAREST}
  2971.   D3DPTFILTERCAPS_LINEAR          = $00000002;
  2972.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEAR}
  2973.   D3DPTFILTERCAPS_MIPNEAREST      = $00000004;
  2974.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPNEAREST}
  2975.   D3DPTFILTERCAPS_MIPLINEAR       = $00000008;
  2976.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPLINEAR}
  2977.   D3DPTFILTERCAPS_LINEARMIPNEAREST = $00000010;
  2978.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEARMIPNEAREST}
  2979.   D3DPTFILTERCAPS_LINEARMIPLINEAR = $00000020;
  2980.   {$EXTERNALSYM D3DPTFILTERCAPS_LINEARMIPLINEAR}
  2981.  
  2982. {$IFDEF DIRECT3D_VERSION_6}
  2983. (* Device3 Min Filter *)
  2984.   D3DPTFILTERCAPS_MINFPOINT       = $00000100;
  2985.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFPOINT}
  2986.   D3DPTFILTERCAPS_MINFLINEAR      = $00000200;
  2987.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFLINEAR}
  2988.   D3DPTFILTERCAPS_MINFANISOTROPIC = $00000400;
  2989.   {$EXTERNALSYM D3DPTFILTERCAPS_MINFANISOTROPIC}
  2990.  
  2991. (* Device3 Mip Filter *)
  2992.   D3DPTFILTERCAPS_MIPFPOINT       = $00010000;
  2993.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFPOINT}
  2994.   D3DPTFILTERCAPS_MIPFLINEAR      = $00020000;
  2995.   {$EXTERNALSYM D3DPTFILTERCAPS_MIPFLINEAR}
  2996.  
  2997. (* Device3 Mag Filter *)
  2998.   D3DPTFILTERCAPS_MAGFPOINT         = $01000000;
  2999.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFPOINT}
  3000.   D3DPTFILTERCAPS_MAGFLINEAR        = $02000000;
  3001.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFLINEAR}
  3002.   D3DPTFILTERCAPS_MAGFANISOTROPIC   = $04000000;
  3003.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFANISOTROPIC}
  3004.   D3DPTFILTERCAPS_MAGFAFLATCUBIC    = $08000000;
  3005.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFAFLATCUBIC}
  3006.   D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC = $10000000;
  3007.   {$EXTERNALSYM D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC}
  3008. {$ENDIF} // DIRECT3D_VERSION_6
  3009.  
  3010. (* TD3DPrimCaps dwTextureBlendCaps *)
  3011.  
  3012.   D3DPTBLENDCAPS_DECAL            = $00000001;
  3013.   {$EXTERNALSYM D3DPTBLENDCAPS_DECAL}
  3014.   D3DPTBLENDCAPS_MODULATE         = $00000002;
  3015.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATE}
  3016.   D3DPTBLENDCAPS_DECALALPHA       = $00000004;
  3017.   {$EXTERNALSYM D3DPTBLENDCAPS_DECALALPHA}
  3018.   D3DPTBLENDCAPS_MODULATEALPHA    = $00000008;
  3019.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATEALPHA}
  3020.   D3DPTBLENDCAPS_DECALMASK        = $00000010;
  3021.   {$EXTERNALSYM D3DPTBLENDCAPS_DECALMASK}
  3022.   D3DPTBLENDCAPS_MODULATEMASK     = $00000020;
  3023.   {$EXTERNALSYM D3DPTBLENDCAPS_MODULATEMASK}
  3024.   D3DPTBLENDCAPS_COPY             = $00000040;
  3025.   {$EXTERNALSYM D3DPTBLENDCAPS_COPY}
  3026. {$IFDEF DIRECT3D_VERSION_5}
  3027.   D3DPTBLENDCAPS_ADD                  = $00000080;
  3028.   {$EXTERNALSYM D3DPTBLENDCAPS_ADD}
  3029. {$ENDIF} // DIRECT3D_VERSION_5
  3030.  
  3031. (* TD3DPrimCaps dwTextureAddressCaps *)
  3032.   D3DPTADDRESSCAPS_WRAP           = $00000001;
  3033.   {$EXTERNALSYM D3DPTADDRESSCAPS_WRAP}
  3034.   D3DPTADDRESSCAPS_MIRROR         = $00000002;
  3035.   {$EXTERNALSYM D3DPTADDRESSCAPS_MIRROR}
  3036.   D3DPTADDRESSCAPS_CLAMP          = $00000004;
  3037.   {$EXTERNALSYM D3DPTADDRESSCAPS_CLAMP}
  3038. {$IFDEF DIRECT3D_VERSION_5}
  3039.   D3DPTADDRESSCAPS_BORDER         = $00000008;
  3040.   {$EXTERNALSYM D3DPTADDRESSCAPS_BORDER}
  3041.   D3DPTADDRESSCAPS_INDEPENDENTUV  = $00000010;
  3042.   {$EXTERNALSYM D3DPTADDRESSCAPS_INDEPENDENTUV}
  3043. {$ENDIF} // DIRECT3D_VERSION_5
  3044.  
  3045. {$IFDEF DIRECT3D_VERSION_6}
  3046.  
  3047. (* D3DDEVICEDESC dwStencilCaps *)
  3048.  
  3049.   D3DSTENCILCAPS_KEEP     = $00000001;
  3050.   {$EXTERNALSYM D3DSTENCILCAPS_KEEP}
  3051.   D3DSTENCILCAPS_ZERO     = $00000002;
  3052.   {$EXTERNALSYM D3DSTENCILCAPS_ZERO}
  3053.   D3DSTENCILCAPS_REPLACE  = $00000004;
  3054.   {$EXTERNALSYM D3DSTENCILCAPS_REPLACE}
  3055.   D3DSTENCILCAPS_INCRSAT  = $00000008;
  3056.   {$EXTERNALSYM D3DSTENCILCAPS_INCRSAT}
  3057.   D3DSTENCILCAPS_DECRSAT  = $00000010;
  3058.   {$EXTERNALSYM D3DSTENCILCAPS_DECRSAT}
  3059.   D3DSTENCILCAPS_INVERT   = $00000020;
  3060.   {$EXTERNALSYM D3DSTENCILCAPS_INVERT}
  3061.   D3DSTENCILCAPS_INCR     = $00000040;
  3062.   {$EXTERNALSYM D3DSTENCILCAPS_INCR}
  3063.   D3DSTENCILCAPS_DECR     = $00000080;
  3064.   {$EXTERNALSYM D3DSTENCILCAPS_DECR}
  3065.  
  3066. (* D3DDEVICEDESC dwTextureOpCaps *)
  3067.  
  3068.   D3DTEXOPCAPS_DISABLE                    = $00000001;
  3069.   {$EXTERNALSYM D3DTEXOPCAPS_DISABLE}
  3070.   D3DTEXOPCAPS_SELECTARG1                 = $00000002;
  3071.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG1}
  3072.   D3DTEXOPCAPS_SELECTARG2                 = $00000004;
  3073.   {$EXTERNALSYM D3DTEXOPCAPS_SELECTARG2}
  3074.   D3DTEXOPCAPS_MODULATE                   = $00000008;
  3075.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE}
  3076.   D3DTEXOPCAPS_MODULATE2X                 = $00000010;
  3077.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE2X}
  3078.   D3DTEXOPCAPS_MODULATE4X                 = $00000020;
  3079.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATE4X}
  3080.   D3DTEXOPCAPS_ADD                        = $00000040;
  3081.   {$EXTERNALSYM D3DTEXOPCAPS_ADD}
  3082.   D3DTEXOPCAPS_ADDSIGNED                  = $00000080;
  3083.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED}
  3084.   D3DTEXOPCAPS_ADDSIGNED2X                = $00000100;
  3085.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSIGNED2X}
  3086.   D3DTEXOPCAPS_SUBTRACT                   = $00000200;
  3087.   {$EXTERNALSYM D3DTEXOPCAPS_SUBTRACT}
  3088.   D3DTEXOPCAPS_ADDSMOOTH                  = $00000400;
  3089.   {$EXTERNALSYM D3DTEXOPCAPS_ADDSMOOTH}
  3090.   D3DTEXOPCAPS_BLENDDIFFUSEALPHA          = $00000800;
  3091.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDDIFFUSEALPHA}
  3092.   D3DTEXOPCAPS_BLENDTEXTUREALPHA          = $00001000;
  3093.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHA}
  3094.   D3DTEXOPCAPS_BLENDFACTORALPHA           = $00002000;
  3095.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDFACTORALPHA}
  3096.   D3DTEXOPCAPS_BLENDTEXTUREALPHAPM        = $00004000;
  3097.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDTEXTUREALPHAPM}
  3098.   D3DTEXOPCAPS_BLENDCURRENTALPHA          = $00008000;
  3099.   {$EXTERNALSYM D3DTEXOPCAPS_BLENDCURRENTALPHA}
  3100.   D3DTEXOPCAPS_PREMODULATE                = $00010000;
  3101.   {$EXTERNALSYM D3DTEXOPCAPS_PREMODULATE}
  3102.   D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR     = $00020000;
  3103.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR}
  3104.   D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA     = $00040000;
  3105.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA}
  3106.   D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR  = $00080000;
  3107.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR}
  3108.   D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA  = $00100000;
  3109.   {$EXTERNALSYM D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA}
  3110.   D3DTEXOPCAPS_BUMPENVMAP                 = $00200000;
  3111.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAP}
  3112.   D3DTEXOPCAPS_BUMPENVMAPLUMINANCE        = $00400000;
  3113.   {$EXTERNALSYM D3DTEXOPCAPS_BUMPENVMAPLUMINANCE}
  3114.   D3DTEXOPCAPS_DOTPRODUCT3                = $00800000;
  3115.   {$EXTERNALSYM D3DTEXOPCAPS_DOTPRODUCT3}
  3116.  
  3117. (* D3DDEVICEDESC dwFVFCaps flags *)
  3118.  
  3119.   D3DFVFCAPS_TEXCOORDCOUNTMASK    = $0000ffff; (* mask for texture coordinate count field *)
  3120.   {$EXTERNALSYM D3DFVFCAPS_TEXCOORDCOUNTMASK}
  3121.   D3DFVFCAPS_DONOTSTRIPELEMENTS   = $00080000; (* Device prefers that vertex elements not be stripped *)
  3122.   {$EXTERNALSYM D3DFVFCAPS_DONOTSTRIPELEMENTS}
  3123.  
  3124. {$ENDIF} // DIRECT3D_VERSION_6
  3125.  
  3126. (*
  3127.  * Description for a device.
  3128.  * This is used to describe a device that is to be created or to query
  3129.  * the current device.
  3130.  *)
  3131.  
  3132. type
  3133.   PD3DDeviceDesc = ^TD3DDeviceDesc;
  3134.   _D3DDeviceDesc = packed record
  3135.     dwSize: DWORD;                       (* Size of TD3DDeviceDesc structure *)
  3136.     dwFlags: DWORD;                      (* Indicates which fields have valid data *)
  3137.     dcmColorModel: TD3DColorModel;       (* Color model of device *)
  3138.     dwDevCaps: DWORD;                    (* Capabilities of device *)
  3139.     dtcTransformCaps: TD3DTransformCaps; (* Capabilities of transform *)
  3140.     bClipping: BOOL;                     (* Device can do 3D clipping *)
  3141.     dlcLightingCaps: TD3DLightingCaps;   (* Capabilities of lighting *)
  3142.     dpcLineCaps: TD3DPrimCaps;
  3143.     dpcTriCaps: TD3DPrimCaps;
  3144.     dwDeviceRenderBitDepth: DWORD;       (* One of DDBB_8, 16, etc.. *)
  3145.     dwDeviceZBufferBitDepth: DWORD;      (* One of DDBD_16, 32, etc.. *)
  3146.     dwMaxBufferSize: DWORD;              (* Maximum execute buffer size *)
  3147.     dwMaxVertexCount: DWORD;             (* Maximum vertex count *)
  3148. {$IFDEF DIRECT3D_VERSION_5}
  3149.     // *** New fields for DX5 *** //
  3150.  
  3151.     // Width and height caps are 0 for legacy HALs.
  3152.     dwMinTextureWidth, dwMinTextureHeight  : DWORD;
  3153.     dwMaxTextureWidth, dwMaxTextureHeight  : DWORD;
  3154.     dwMinStippleWidth, dwMaxStippleWidth   : DWORD;
  3155.     dwMinStippleHeight, dwMaxStippleHeight : DWORD;
  3156. {$ENDIF} // DIRECT3D_VERSION_5
  3157.  
  3158. {$IFDEF DIRECT3D_VERSION_6}
  3159.     // New fields for DX6
  3160.     dwMaxTextureRepeat : DWORD;
  3161.     dwMaxTextureAspectRatio : DWORD;
  3162.     dwMaxAnisotropy : DWORD;
  3163.  
  3164.     // Guard band that the rasterizer can accommodate
  3165.     // Screen-space vertices inside this space but outside the viewport
  3166.     // will get clipped properly.
  3167.     dvGuardBandLeft : TD3DValue;
  3168.     dvGuardBandTop : TD3DValue;
  3169.     dvGuardBandRight : TD3DValue;
  3170.     dvGuardBandBottom : TD3DValue;
  3171.  
  3172.     dvExtentsAdjust : TD3DValue;
  3173.     dwStencilCaps : DWORD;
  3174.  
  3175.     dwFVFCaps : DWORD;  (* low 4 bits: 0 implies TLVERTEX only, 1..8 imply FVF aware *)
  3176.     dwTextureOpCaps : DWORD;
  3177.     wMaxTextureBlendStages : WORD;
  3178.     wMaxSimultaneousTextures : WORD;
  3179. {$ENDIF} // DIRECT3D_VERSION_6
  3180.   end;
  3181.   {$EXTERNALSYM _D3DDeviceDesc}
  3182.   D3DDeviceDesc = _D3DDeviceDesc;
  3183.   {$EXTERNALSYM D3DDeviceDesc}
  3184.   TD3DDeviceDesc = _D3DDeviceDesc;
  3185.  
  3186. {$IFDEF DIRECT3D_VERSION_7}
  3187.   PD3DDeviceDesc7 = ^TD3DDeviceDesc7;
  3188.   _D3DDeviceDesc7 = packed record
  3189.     dwDevCaps:               DWORD;             (* Capabilities of device *)
  3190.     dpcLineCaps:             TD3DPrimCaps;
  3191.     dpcTriCaps:              TD3DPrimCaps;
  3192.     dwDeviceRenderBitDepth:  DWORD;             (* One of DDBB_8, 16, etc.. *)
  3193.     dwDeviceZBufferBitDepth: DWORD;             (* One of DDBD_16, 32, etc.. *)
  3194.  
  3195.     dwMinTextureWidth, dwMinTextureHeight: DWORD;
  3196.     dwMaxTextureWidth, dwMaxTextureHeight: DWORD;
  3197.  
  3198.     dwMaxTextureRepeat:                    DWORD;
  3199.     dwMaxTextureAspectRatio:               DWORD;
  3200.     dwMaxAnisotropy:                       DWORD;
  3201.  
  3202.     dvGuardBandLeft:                       TD3DValue;
  3203.     dvGuardBandTop:                        TD3DValue;
  3204.     dvGuardBandRight:                      TD3DValue;
  3205.     dvGuardBandBottom:                     TD3DValue;
  3206.  
  3207.     dvExtentsAdjust:                       TD3DValue;
  3208.     dwStencilCaps:                         DWORD;
  3209.  
  3210.     dwFVFCaps:                             DWORD;
  3211.     dwTextureOpCaps:                       DWORD;
  3212.     wMaxTextureBlendStages:                WORD;
  3213.     wMaxSimultaneousTextures:              WORD;
  3214.  
  3215.     dwMaxActiveLights:                     DWORD;
  3216.     dvMaxVertexW:                          TD3DValue;
  3217.     deviceGUID:                            TGUID;
  3218.  
  3219.     wMaxUserClipPlanes:                    WORD;
  3220.     wMaxVertexBlendMatrices:               WORD;
  3221.  
  3222.     dwVertexProcessingCaps:                DWORD;
  3223.  
  3224.     dwReserved1:                           DWORD;
  3225.     dwReserved2:                           DWORD;
  3226.     dwReserved3:                           DWORD;
  3227.     dwReserved4:                           DWORD;
  3228.   end;
  3229.   {$EXTERNALSYM _D3DDeviceDesc7}
  3230.   D3DDeviceDesc7 = _D3DDeviceDesc7;
  3231.   {$EXTERNALSYM D3DDeviceDesc7}
  3232.   TD3DDeviceDesc7 = _D3DDeviceDesc7;
  3233. {$ENDIF} // DIRECT3D_VERSION_7
  3234.  
  3235. const
  3236.   D3DDEVICEDESCSIZE = SizeOf(TD3DDeviceDesc);
  3237.   {$EXTERNALSYM D3DDEVICEDESCSIZE}
  3238. {$IFDEF DIRECT3D_VERSION_7} // There is the BUG in C++Headers
  3239.   D3DDEVICEDESC7SIZE = SizeOf(TD3DDeviceDesc7);
  3240.   {$EXTERNALSYM D3DDEVICEDESC7SIZE}
  3241. {$ENDIF} // DIRECT3D_VERSION_7
  3242.  
  3243. type
  3244.   TD3DEnumDevicesCallbackA = function (lpGuid: PGUID; // nil for the default device
  3245.       lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
  3246.       var lpD3DHWDeviceDesc: TD3DDeviceDesc;
  3247.       var lpD3DHELDeviceDesc: TD3DDeviceDesc;
  3248.       lpContext: Pointer): HResult; stdcall;
  3249.   TD3DEnumDevicesCallback = TD3DEnumDevicesCallbackA;
  3250.   {$NODEFINE TD3DEnumDevicesCallbackA}
  3251.   {$NODEFINE TD3DEnumDevicesCallback}
  3252.  
  3253. {$IFDEF DIRECT3D_VERSION_7}
  3254.   TD3DEnumDevicesCallback7A = function (
  3255.       lpDeviceDescription: PAnsiChar; lpDeviceName: PAnsiChar;
  3256.       const lpD3DDeviceDesc: TD3DDeviceDesc7; lpContext: Pointer): HResult; stdcall;
  3257.   TD3DEnumDevicesCallback7 = TD3DEnumDevicesCallback7A;
  3258.   {$NODEFINE TD3DEnumDevicesCallback7A}
  3259.   {$NODEFINE TD3DEnumDevicesCallback7}
  3260. {$ENDIF} // DIRECT3D_VERSION_7
  3261.  
  3262. (* TD3DDeviceDesc dwFlags indicating valid fields *)
  3263.  
  3264. const
  3265.   D3DDD_COLORMODEL            = $00000001; (* dcmColorModel is valid *)
  3266.   {$EXTERNALSYM D3DDD_COLORMODEL}
  3267.   D3DDD_DEVCAPS               = $00000002; (* dwDevCaps is valid *)
  3268.   {$EXTERNALSYM D3DDD_DEVCAPS}
  3269.   D3DDD_TRANSFORMCAPS         = $00000004; (* dtcTransformCaps is valid *)
  3270.   {$EXTERNALSYM D3DDD_TRANSFORMCAPS}
  3271.   D3DDD_LIGHTINGCAPS          = $00000008; (* dlcLightingCaps is valid *)
  3272.   {$EXTERNALSYM D3DDD_LIGHTINGCAPS}
  3273.   D3DDD_BCLIPPING             = $00000010; (* bClipping is valid *)
  3274.   {$EXTERNALSYM D3DDD_BCLIPPING}
  3275.   D3DDD_LINECAPS              = $00000020; (* dpcLineCaps is valid *)
  3276.   {$EXTERNALSYM D3DDD_LINECAPS}
  3277.   D3DDD_TRICAPS               = $00000040; (* dpcTriCaps is valid *)
  3278.   {$EXTERNALSYM D3DDD_TRICAPS}
  3279.   D3DDD_DEVICERENDERBITDEPTH  = $00000080; (* dwDeviceRenderBitDepth is valid *)
  3280.   {$EXTERNALSYM D3DDD_DEVICERENDERBITDEPTH}
  3281.   D3DDD_DEVICEZBUFFERBITDEPTH = $00000100; (* dwDeviceZBufferBitDepth is valid *)
  3282.   {$EXTERNALSYM D3DDD_DEVICEZBUFFERBITDEPTH}
  3283.   D3DDD_MAXBUFFERSIZE         = $00000200; (* dwMaxBufferSize is valid *)
  3284.   {$EXTERNALSYM D3DDD_MAXBUFFERSIZE}
  3285.   D3DDD_MAXVERTEXCOUNT        = $00000400; (* dwMaxVertexCount is valid *)
  3286.   {$EXTERNALSYM D3DDD_MAXVERTEXCOUNT}
  3287.  
  3288. (* TD3DDeviceDesc dwDevCaps flags *)
  3289.  
  3290.   D3DDEVCAPS_FLOATTLVERTEX        = $00000001; (* Device accepts floating point *)
  3291.                                                (* for post-transform vertex data *)
  3292.   {$EXTERNALSYM D3DDEVCAPS_FLOATTLVERTEX}
  3293.   D3DDEVCAPS_SORTINCREASINGZ      = $00000002; (* Device needs data sorted for increasing Z*)
  3294.   {$EXTERNALSYM D3DDEVCAPS_SORTINCREASINGZ}
  3295.   D3DDEVCAPS_SORTDECREASINGZ      = $00000004; (* Device needs data sorted for decreasing Z*)
  3296.   {$EXTERNALSYM D3DDEVCAPS_SORTDECREASINGZ}
  3297.   D3DDEVCAPS_SORTEXACT            = $00000008; (* Device needs data sorted exactly *)
  3298.   {$EXTERNALSYM D3DDEVCAPS_SORTEXACT}
  3299.  
  3300.   D3DDEVCAPS_EXECUTESYSTEMMEMORY  = $00000010; (* Device can use execute buffers from system memory *)
  3301.   {$EXTERNALSYM D3DDEVCAPS_EXECUTESYSTEMMEMORY}
  3302.   D3DDEVCAPS_EXECUTEVIDEOMEMORY   = $00000020; (* Device can use execute buffers from video memory *)
  3303.   {$EXTERNALSYM D3DDEVCAPS_EXECUTEVIDEOMEMORY}
  3304.   D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = $00000040; (* Device can use TL buffers from system memory *)
  3305.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXSYSTEMMEMORY}
  3306.   D3DDEVCAPS_TLVERTEXVIDEOMEMORY  = $00000080; (* Device can use TL buffers from video memory *)
  3307.   {$EXTERNALSYM D3DDEVCAPS_TLVERTEXVIDEOMEMORY}
  3308.   D3DDEVCAPS_TEXTURESYSTEMMEMORY  = $00000100; (* Device can texture from system memory *)
  3309.   {$EXTERNALSYM D3DDEVCAPS_TEXTURESYSTEMMEMORY}
  3310.   D3DDEVCAPS_TEXTUREVIDEOMEMORY   = $00000200; (* Device can texture from device memory *)
  3311.   {$EXTERNALSYM D3DDEVCAPS_TEXTUREVIDEOMEMORY}
  3312. {$IFDEF DIRECT3D_VERSION_5}
  3313.   D3DDEVCAPS_DRAWPRIMTLVERTEX     = $00000400; (* Device can draw TLVERTEX primitives *)
  3314.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMTLVERTEX}
  3315.   D3DDEVCAPS_CANRENDERAFTERFLIP      = $00000800; (* Device can render without waiting for flip to complete *)
  3316.   {$EXTERNALSYM D3DDEVCAPS_CANRENDERAFTERFLIP}
  3317.   D3DDEVCAPS_TEXTURENONLOCALVIDMEM   = $00001000; (* Device can texture from nonlocal video memory *)
  3318.   {$EXTERNALSYM D3DDEVCAPS_TEXTURENONLOCALVIDMEM}
  3319. {$ENDIF} // DIRECT3D_VERSION_5
  3320. {$IFDEF DIRECT3D_VERSION_6}
  3321.   D3DDEVCAPS_DRAWPRIMITIVES2         = $00002000; (* Device can support DrawPrimitives2 *)
  3322.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2}
  3323.   D3DDEVCAPS_SEPARATETEXTUREMEMORIES = $00004000; (* Device is texturing from separate memory pools *)
  3324.   {$EXTERNALSYM D3DDEVCAPS_SEPARATETEXTUREMEMORIES}
  3325.   D3DDEVCAPS_DRAWPRIMITIVES2EX       = $00008000; (* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*)
  3326.   {$EXTERNALSYM D3DDEVCAPS_DRAWPRIMITIVES2EX}
  3327. {$ENDIF} // DIRECT3D_VERSION_6
  3328. {$IFDEF DIRECT3D_VERSION_7}
  3329.   D3DDEVCAPS_HWTRANSFORMANDLIGHT     = $00010000; (* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also *)
  3330.   {$EXTERNALSYM D3DDEVCAPS_HWTRANSFORMANDLIGHT}
  3331.   D3DDEVCAPS_CANBLTSYSTONONLOCAL     = $00020000; (* Device supports a Tex Blt from system memory to non-local vidmem *)
  3332.   {$EXTERNALSYM D3DDEVCAPS_CANBLTSYSTONONLOCAL}
  3333.   D3DDEVCAPS_HWRASTERIZATION         = $00080000; (* Device has HW acceleration for rasterization *)
  3334.   {$EXTERNALSYM D3DDEVCAPS_HWRASTERIZATION}
  3335.  
  3336. (*
  3337.  * These are the flags in the D3DDEVICEDESC7.dwVertexProcessingCaps field
  3338.  *)
  3339.  
  3340. (* device can do texgen *)
  3341.   D3DVTXPCAPS_TEXGEN              = $00000001;
  3342.   {$EXTERNALSYM D3DVTXPCAPS_TEXGEN}
  3343. (* device can do IDirect3DDevice7 colormaterialsource ops *)
  3344.   D3DVTXPCAPS_MATERIALSOURCE7     = $00000002;
  3345.   {$EXTERNALSYM D3DVTXPCAPS_MATERIALSOURCE7}
  3346. (* device can do vertex fog *)
  3347.   D3DVTXPCAPS_VERTEXFOG           = $00000004;
  3348.   {$EXTERNALSYM D3DVTXPCAPS_VERTEXFOG}
  3349. (* device can do directional lights *)
  3350.   D3DVTXPCAPS_DIRECTIONALLIGHTS   = $00000008;
  3351.   {$EXTERNALSYM D3DVTXPCAPS_DIRECTIONALLIGHTS}
  3352. (* device can do positional lights (includes point and spot) *)
  3353.   D3DVTXPCAPS_POSITIONALLIGHTS    = $00000010;
  3354.   {$EXTERNALSYM D3DVTXPCAPS_POSITIONALLIGHTS}
  3355. (* device can do local viewer *)
  3356.   D3DVTXPCAPS_LOCALVIEWER         = $00000020;
  3357.   {$EXTERNALSYM D3DVTXPCAPS_LOCALVIEWER}
  3358. {$ENDIF} // DIRECT3D_VERSION_7
  3359.  
  3360.   D3DFDS_COLORMODEL        = $00000001; (* Match color model *)
  3361.   {$EXTERNALSYM D3DFDS_COLORMODEL}
  3362.   D3DFDS_GUID              = $00000002; (* Match guid *)
  3363.   {$EXTERNALSYM D3DFDS_GUID}
  3364.   D3DFDS_HARDWARE          = $00000004; (* Match hardware/software *)
  3365.   {$EXTERNALSYM D3DFDS_HARDWARE}
  3366.   D3DFDS_TRIANGLES         = $00000008; (* Match in triCaps *)
  3367.   {$EXTERNALSYM D3DFDS_TRIANGLES}
  3368.   D3DFDS_LINES             = $00000010; (* Match in lineCaps  *)
  3369.   {$EXTERNALSYM D3DFDS_LINES}
  3370.   D3DFDS_MISCCAPS          = $00000020; (* Match primCaps.dwMiscCaps *)
  3371.   {$EXTERNALSYM D3DFDS_MISCCAPS}
  3372.   D3DFDS_RASTERCAPS        = $00000040; (* Match primCaps.dwRasterCaps *)
  3373.   {$EXTERNALSYM D3DFDS_RASTERCAPS}
  3374.   D3DFDS_ZCMPCAPS          = $00000080; (* Match primCaps.dwZCmpCaps *)
  3375.   {$EXTERNALSYM D3DFDS_ZCMPCAPS}
  3376.   D3DFDS_ALPHACMPCAPS      = $00000100; (* Match primCaps.dwAlphaCmpCaps *)
  3377.   {$EXTERNALSYM D3DFDS_ALPHACMPCAPS}
  3378.   D3DFDS_SRCBLENDCAPS      = $00000200; (* Match primCaps.dwSourceBlendCaps *)
  3379.   {$EXTERNALSYM D3DFDS_SRCBLENDCAPS}
  3380.   D3DFDS_DSTBLENDCAPS      = $00000400; (* Match primCaps.dwDestBlendCaps *)
  3381.   {$EXTERNALSYM D3DFDS_DSTBLENDCAPS}
  3382.   D3DFDS_SHADECAPS         = $00000800; (* Match primCaps.dwShadeCaps *)
  3383.   {$EXTERNALSYM D3DFDS_SHADECAPS}
  3384.   D3DFDS_TEXTURECAPS       = $00001000; (* Match primCaps.dwTextureCaps *)
  3385.   {$EXTERNALSYM D3DFDS_TEXTURECAPS}
  3386.   D3DFDS_TEXTUREFILTERCAPS = $00002000; (* Match primCaps.dwTextureFilterCaps *)
  3387.   {$EXTERNALSYM D3DFDS_TEXTUREFILTERCAPS}
  3388.   D3DFDS_TEXTUREBLENDCAPS  = $00004000; (* Match primCaps.dwTextureBlendCaps *)
  3389.   {$EXTERNALSYM D3DFDS_TEXTUREBLENDCAPS}
  3390.   D3DFDS_TEXTUREADDRESSCAPS  = $00008000; (* Match primCaps.dwTextureBlendCaps *)
  3391.   {$EXTERNALSYM D3DFDS_TEXTUREADDRESSCAPS}
  3392.  
  3393. (*
  3394.  * FindDevice arguments
  3395.  *)
  3396. type
  3397.   PD3DFindDeviceSearch = ^TD3DFindDeviceSearch;
  3398.   _D3DFINDDEVICESEARCH = packed record
  3399.     dwSize: DWORD;
  3400.     dwFlags: DWORD;
  3401.     bHardware: BOOL;
  3402.     dcmColorModel: TD3DColorModel;
  3403.     guid: TGUID;
  3404.     dwCaps: DWORD;
  3405.     dpcPrimCaps: TD3DPrimCaps;
  3406.   end;
  3407.   {$EXTERNALSYM _D3DFINDDEVICESEARCH}
  3408.   D3DFINDDEVICESEARCH = _D3DFINDDEVICESEARCH;
  3409.   {$EXTERNALSYM D3DFINDDEVICESEARCH}
  3410.   TD3DFindDeviceSearch = _D3DFINDDEVICESEARCH;
  3411.  
  3412.   PD3DFindDeviceResult = ^TD3DFindDeviceResult;
  3413.   _D3DFINDDEVICERESULT = packed record
  3414.     dwSize: DWORD;
  3415.     guid: TGUID;                (* guid which matched *)
  3416.     ddHwDesc: TD3DDeviceDesc;   (* hardware TD3DDeviceDesc *)
  3417.     ddSwDesc: TD3DDeviceDesc;   (* software TD3DDeviceDesc *)
  3418.   end;
  3419.   {$EXTERNALSYM _D3DFINDDEVICERESULT}
  3420.   D3DFINDDEVICERESULT = _D3DFINDDEVICERESULT;
  3421.   {$EXTERNALSYM D3DFINDDEVICERESULT}
  3422.   TD3DFindDeviceResult = _D3DFINDDEVICERESULT;
  3423.  
  3424. (*
  3425.  * Description of execute buffer.
  3426.  *)
  3427.   PD3DExecuteBufferDesc = ^TD3DExecuteBufferDesc;
  3428.   _D3DExecuteBufferDesc = packed record
  3429.     dwSize: DWORD;         (* size of this structure *)
  3430.     dwFlags: DWORD;        (* flags indicating which fields are valid *)
  3431.     dwCaps: DWORD;         (* capabilities of execute buffer *)
  3432.     dwBufferSize: DWORD;   (* size of execute buffer data *)
  3433.     lpData: Pointer;       (* pointer to actual data *)
  3434.   end;
  3435.   {$EXTERNALSYM _D3DExecuteBufferDesc}
  3436.   D3DExecuteBufferDesc = _D3DExecuteBufferDesc;
  3437.   {$EXTERNALSYM D3DExecuteBufferDesc}
  3438.   TD3DExecuteBufferDesc = _D3DExecuteBufferDesc;
  3439.  
  3440. (* D3DEXECUTEBUFFER dwFlags indicating valid fields *)
  3441.  
  3442. const
  3443.   D3DDEB_BUFSIZE          = $00000001;     (* buffer size valid *)
  3444.   {$EXTERNALSYM D3DDEB_BUFSIZE}
  3445.   D3DDEB_CAPS             = $00000002;     (* caps valid *)
  3446.   {$EXTERNALSYM D3DDEB_CAPS}
  3447.   D3DDEB_LPDATA           = $00000004;     (* lpData valid *)
  3448.   {$EXTERNALSYM D3DDEB_LPDATA}
  3449.  
  3450. (* D3DEXECUTEBUFFER dwCaps *)
  3451.  
  3452.   D3DDEBCAPS_SYSTEMMEMORY = $00000001;     (* buffer in system memory *)
  3453.   {$EXTERNALSYM D3DDEBCAPS_SYSTEMMEMORY}
  3454.   D3DDEBCAPS_VIDEOMEMORY  = $00000002;     (* buffer in device memory *)
  3455.   {$EXTERNALSYM D3DDEBCAPS_VIDEOMEMORY}
  3456.   D3DDEBCAPS_MEM          = (D3DDEBCAPS_SYSTEMMEMORY or D3DDEBCAPS_VIDEOMEMORY);
  3457.   {$EXTERNALSYM D3DDEBCAPS_MEM}
  3458.  
  3459. {$IFDEF DIRECT3D_VERSION_LESS_8}
  3460. {$IFDEF DIRECT3D_VERSION_7}
  3461. type
  3462.   PD3DDevInfo_TextureManager = ^TD3DDevInfo_TextureManager;
  3463.   _D3DDEVINFO_TEXTUREMANAGER = packed record
  3464.     bThrashing:              BOOL;       (* indicates if thrashing *)
  3465.     dwApproxBytesDownloaded: DWORD;      (* Approximate number of bytes downloaded by texture manager *)
  3466.     dwNumEvicts:             DWORD;      (* number of textures evicted *)
  3467.     dwNumVidCreates:         DWORD;      (* number of textures created in video memory *)
  3468.     dwNumTexturesUsed:       DWORD;      (* number of textures used *)
  3469.     dwNumUsedTexInVid:       DWORD;      (* number of used textures present in video memory *)
  3470.     dwWorkingSet:            DWORD;      (* number of textures in video memory *)
  3471.     dwWorkingSetBytes:       DWORD;      (* number of bytes in video memory *)
  3472.     dwTotalManaged:          DWORD;      (* total number of managed textures *)
  3473.     dwTotalBytes:            DWORD;      (* total number of bytes of managed textures *)
  3474.     dwLastPri:               DWORD;      (* priority of last texture evicted *)
  3475.   end;
  3476.   {$EXTERNALSYM _D3DDEVINFO_TEXTUREMANAGER}
  3477.   D3DDEVINFO_TEXTUREMANAGER = _D3DDEVINFO_TEXTUREMANAGER;
  3478.   {$EXTERNALSYM D3DDEVINFO_TEXTUREMANAGER}
  3479.   TD3DDevInfo_TextureManager = _D3DDEVINFO_TEXTUREMANAGER;
  3480.   PD3DDevInfoTextureManager = PD3DDevInfo_TextureManager;
  3481.   TD3DDevInfoTextureManager = _D3DDEVINFO_TEXTUREMANAGER;
  3482.  
  3483.   PD3DDevInfo_Texturing = ^TD3DDevInfo_Texturing;
  3484.   _D3DDEVINFO_TEXTURING = packed record
  3485.     dwNumLoads:          DWORD;          (* counts Load() API calls *)
  3486.     dwApproxBytesLoaded: DWORD;          (* Approximate number bytes loaded via Load() *)
  3487.     dwNumPreLoads:       DWORD;          (* counts PreLoad() API calls *)
  3488.     dwNumSet:            DWORD;          (* counts SetTexture() API calls *)
  3489.     dwNumCreates:        DWORD;          (* counts texture creates *)
  3490.     dwNumDestroys:       DWORD;          (* counts texture destroys *)
  3491.     dwNumSetPriorities:  DWORD;          (* counts SetPriority() API calls *)
  3492.     dwNumSetLODs:        DWORD;          (* counts SetLOD() API calls *)
  3493.     dwNumLocks:          DWORD;          (* counts number of texture locks *)
  3494.     dwNumGetDCs:         DWORD;          (* counts number of GetDCs to textures *)
  3495.   end;
  3496.   {$EXTERNALSYM _D3DDEVINFO_TEXTURING}
  3497.   D3DDEVINFO_TEXTURING = _D3DDEVINFO_TEXTURING;
  3498.   {$EXTERNALSYM D3DDEVINFO_TEXTURING}
  3499.   TD3DDevInfo_Texturing = _D3DDEVINFO_TEXTURING;
  3500.   PD3DDevInfoTexturing = PD3DDevInfo_Texturing;
  3501.   TD3DDevInfoTexturing = TD3DDevInfo_Texturing;
  3502. {$ENDIF} // DIRECT3D_VERSION_7
  3503. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  3504.  
  3505.  
  3506.  
  3507. (*==========================================================================;
  3508.  *
  3509.  *
  3510.  *  File:   d3d.h
  3511.  *  Content:    Direct3D include file
  3512.  *
  3513.  ****************************************************************************)
  3514.  
  3515. // include this file content only if compiling for <=DX7 interfaces
  3516. {$IFDEF DIRECT3D_VERSION_LESS_8}
  3517.  
  3518. function D3DErrorString(Value: HResult): String;
  3519.  
  3520.  
  3521. {$IFDEF DIRECT3D_VERSION_5}
  3522. const
  3523.   IID_IDirect3DRampDevice: TGUID =
  3524.       (D1:$F2086B20;D2:$259F;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
  3525.   {$EXTERNALSYM IID_IDirect3DRampDevice}
  3526.   IID_IDirect3DRGBDevice: TGUID =
  3527.       (D1:$A4665C60;D2:$2673;D3:$11CF;D4:($A3,$1A,$00,$AA,$00,$B9,$33,$56));
  3528.   {$EXTERNALSYM IID_IDirect3DRGBDevice}
  3529.   IID_IDirect3DHALDevice: TGUID =
  3530.       (D1:$84E63dE0;D2:$46AA;D3:$11CF;D4:($81,$6F,$00,$00,$C0,$20,$15,$6E));
  3531.   {$EXTERNALSYM IID_IDirect3DHALDevice}
  3532.   IID_IDirect3DMMXDevice: TGUID =
  3533.       (D1:$881949a1;D2:$d6f3;D3:$11d0;D4:($89,$ab,$00,$a0,$c9,$05,$41,$29));
  3534.   {$EXTERNALSYM IID_IDirect3DMMXDevice}
  3535. {$ENDIF} // DIRECT3D_VERSION_5
  3536.  
  3537. {$IFDEF DIRECT3D_VERSION_6}
  3538.   IID_IDirect3DRefDevice: TGUID =
  3539.       (D1:$50936643;D2:$13e9;D3:$11d1;D4:($89,$aa,$00,$a0,$c9,$05,$41,$29));
  3540.   {$EXTERNALSYM IID_IDirect3DRefDevice}
  3541.   IID_IDirect3DNullDevice: TGUID =
  3542.       (D1:$8767df22;D2:$bacc;D3:$11d1;D4:($89,$69,$00,$a0,$c9,$06,$29,$a8));
  3543.   {$EXTERNALSYM IID_IDirect3DNullDevice}
  3544. {$ENDIF} // DIRECT3D_VERSION_6
  3545. {$IFDEF DIRECT3D_VERSION_7}
  3546.   IID_IDirect3DTnLHalDevice: TGUID = '{f5049e78-4861-11d2-a407-00a0c90629a8}';
  3547.   {$EXTERNALSYM IID_IDirect3DTnLHalDevice}
  3548. {$ENDIF} // DIRECT3D_VERSION_7
  3549.  
  3550. type
  3551.   IDirect3D = interface;
  3552.   {$EXTERNALSYM IDirect3D}
  3553.   {$IFDEF DIRECT3D_VERSION_5}
  3554.   IDirect3D2 = interface;
  3555.   {$ENDIF} // DIRECT3D_VERSION_5
  3556.   {$IFDEF DIRECT3D_VERSION_6}
  3557.   IDirect3D3 = interface;
  3558.   {$ENDIF} // DIRECT3D_VERSION_5
  3559.   {$IFDEF DIRECT3D_VERSION_7}
  3560.   IDirect3D7 = interface;
  3561.   {$ENDIF} // DIRECT3D_VERSION_5
  3562.   IDirect3DDevice = interface;
  3563.   {$IFDEF DIRECT3D_VERSION_5}
  3564.   IDirect3DDevice2 = interface;
  3565.   {$ENDIF} // DIRECT3D_VERSION_5
  3566.   {$IFDEF DIRECT3D_VERSION_6}
  3567.   IDirect3DDevice3 = interface;
  3568.   {$ENDIF} // DIRECT3D_VERSION_6
  3569.   {$IFDEF DIRECT3D_VERSION_7}
  3570.   IDirect3DDevice7 = interface;
  3571.   {$ENDIF} // DIRECT3D_VERSION_7
  3572.   IDirect3DExecuteBuffer = interface;
  3573.   IDirect3DLight = interface;
  3574.   IDirect3DMaterial = interface;
  3575.   {$IFDEF DIRECT3D_VERSION_5}
  3576.   IDirect3DMaterial2 = interface;
  3577.   {$ENDIF} // DIRECT3D_VERSION_5
  3578.   {$IFDEF DIRECT3D_VERSION_6}
  3579.   IDirect3DMaterial3 = interface;
  3580.   {$ENDIF} // DIRECT3D_VERSION_6
  3581.   IDirect3DTexture = interface;
  3582.   {$IFDEF DIRECT3D_VERSION_5}
  3583.   IDirect3DTexture2 = interface;
  3584.   {$ENDIF} // DIRECT3D_VERSION_5
  3585.   IDirect3DViewport = interface;
  3586.   {$IFDEF DIRECT3D_VERSION_5}
  3587.   IDirect3DViewport2 = interface;
  3588.   {$ENDIF} // DIRECT3D_VERSION_5
  3589.   {$IFDEF DIRECT3D_VERSION_6}
  3590.   IDirect3DViewport3 = interface;
  3591.   IDirect3DVertexBuffer = interface;
  3592.   {$ENDIF} // DIRECT3D_VERSION_6
  3593.   {$IFDEF DIRECT3D_VERSION_7}
  3594.   IDirect3DVertexBuffer7 = interface;
  3595.   {$ENDIF} // DIRECT3D_VERSION_7
  3596.  
  3597.  
  3598. (*
  3599.  * Interface IID's
  3600.  *)
  3601.   IID_IDirect3D = IDirect3D;
  3602.   {$EXTERNALSYM IID_IDirect3D}
  3603.   {$IFDEF DIRECT3D_VERSION_5}
  3604.   IID_IDirect3D2 = IDirect3D2;
  3605.   {$EXTERNALSYM IID_IDirect3D2}
  3606.   {$ENDIF} // DIRECT3D_VERSION_5
  3607.   {$IFDEF DIRECT3D_VERSION_6}
  3608.   IID_IDirect3D3 = IDirect3D3;
  3609.   {$EXTERNALSYM IID_IDirect3D3}
  3610.   {$ENDIF} // DIRECT3D_VERSION_6
  3611.   {$IFDEF DIRECT3D_VERSION_7}
  3612.   IID_IDirect3D7 = IDirect3D7;
  3613.   {$EXTERNALSYM IID_IDirect3D7}
  3614.   {$ENDIF} // DIRECT3D_VERSION_7
  3615.  
  3616.  
  3617. (*
  3618.  * Internal Guid to distinguish requested MMX from MMX being used as an RGB rasterizer
  3619.  *)
  3620.  
  3621.   IID_IDirect3DDevice = IDirect3DDevice;
  3622.   {$EXTERNALSYM IID_IDirect3DDevice}
  3623.   {$IFDEF DIRECT3D_VERSION_5}
  3624.   IID_IDirect3DDevice2 = IDirect3DDevice2;
  3625.   {$EXTERNALSYM IID_IDirect3DDevice2}
  3626.   {$ENDIF}
  3627.   {$IFDEF DIRECT3D_VERSION_6}
  3628.   IID_IDirect3DDevice3 = IDirect3DDevice3;
  3629.   {$EXTERNALSYM IID_IDirect3DDevice3}
  3630.   {$ENDIF}
  3631.   {$IFDEF DIRECT3D_VERSION_7}
  3632.   IID_IDirect3DDevice7 = IDirect3DDevice7;
  3633.   {$EXTERNALSYM IID_IDirect3DDevice7}
  3634.   {$ENDIF}
  3635.  
  3636.   IID_IDirect3DTexture = IDirect3DTexture;
  3637.   {$EXTERNALSYM IID_IDirect3DTexture}
  3638.   {$IFDEF DIRECT3D_VERSION_5}
  3639.   IID_IDirect3DTexture2 = IDirect3DTexture2;
  3640.   {$EXTERNALSYM IID_IDirect3DTexture2}
  3641.   {$ENDIF}
  3642.  
  3643.   IID_IDirect3DLight = IDirect3DLight;
  3644.   {$EXTERNALSYM IID_IDirect3DLight}
  3645.  
  3646.   IID_IDirect3DMaterial = IDirect3DMaterial;
  3647.   {$EXTERNALSYM IID_IDirect3DMaterial}
  3648.   {$IFDEF DIRECT3D_VERSION_5}
  3649.   IID_IDirect3DMaterial2 = IDirect3DMaterial2;
  3650.   {$EXTERNALSYM IID_IDirect3DMaterial2}
  3651.   {$ENDIF}
  3652.   {$IFDEF DIRECT3D_VERSION_6}
  3653.   IID_IDirect3DMaterial3 = IDirect3DMaterial3;
  3654.   {$EXTERNALSYM IID_IDirect3DMaterial3}
  3655.   {$ENDIF}
  3656.  
  3657.   IID_IDirect3DExecuteBuffer = IDirect3DExecuteBuffer;
  3658.   {$EXTERNALSYM IID_IDirect3DExecuteBuffer}
  3659.   IID_IDirect3DViewport = IDirect3DViewport;
  3660.   {$EXTERNALSYM IID_IDirect3DViewport}
  3661.   {$IFDEF DIRECT3D_VERSION_5}
  3662.   IID_IDirect3DViewport2 = IDirect3DViewport2;
  3663.   {$EXTERNALSYM IID_IDirect3DViewport2}
  3664.   {$ENDIF}
  3665.   {$IFDEF DIRECT3D_VERSION_6}
  3666.   IID_IDirect3DViewport3 = IDirect3DViewport3;
  3667.   {$EXTERNALSYM IID_IDirect3DViewport3}
  3668.   {$ENDIF}
  3669.   {$IFDEF DIRECT3D_VERSION_6}
  3670.   IID_IDirect3DVertexBuffer = IDirect3DVertexBuffer;
  3671.   {$EXTERNALSYM IID_IDirect3DVertexBuffer}
  3672.   {$ENDIF}
  3673.   {$IFDEF DIRECT3D_VERSION_7}
  3674.   IID_IDirect3DVertexBuffer7 = IDirect3DVertexBuffer7;
  3675.   {$EXTERNALSYM IID_IDirect3DVertexBuffer7}
  3676.   {$ENDIF}
  3677.  
  3678.  
  3679.  
  3680. (*
  3681.  * Direct3D interfaces
  3682.  *)
  3683.  
  3684.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D);'}
  3685.   IDirect3D = interface(IUnknown)
  3686.     ['{3BBA0080-2421-11CF-A31A-00AA00B93356}']
  3687.     (*** IDirect3D methods ***)
  3688.     function Initialize(lpREFIID: {REFIID} PGUID): HResult; stdcall;
  3689.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  3690.         lpUserArg: Pointer): HResult; stdcall;
  3691.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  3692.         pUnkOuter: IUnknown): HResult; stdcall;
  3693.     function CreateMaterial(var lplpDirect3DMaterial: IDirect3DMaterial;
  3694.         pUnkOuter: IUnknown): HResult; stdcall;
  3695.     function CreateViewport(var lplpD3DViewport: IDirect3DViewport;
  3696.         pUnkOuter: IUnknown): HResult; stdcall;
  3697.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  3698.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  3699.   end;
  3700.  
  3701. {$IFDEF DIRECT3D_VERSION_5}
  3702.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D2);'}
  3703.   {$EXTERNALSYM IDirect3D2}
  3704.   IDirect3D2 = interface(IUnknown)
  3705.     ['{6aae1ec1-662a-11d0-889d-00aa00bbb76a}']
  3706.     (*** IDirect3D2 methods ***)
  3707.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  3708.         lpUserArg: Pointer): HResult; stdcall;
  3709.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  3710.         pUnkOuter: IUnknown): HResult; stdcall;
  3711.     function CreateMaterial(var lplpDirect3DMaterial2: IDirect3DMaterial2;
  3712.         pUnkOuter: IUnknown): HResult; stdcall;
  3713.     function CreateViewport(var lplpD3DViewport2: IDirect3DViewport2;
  3714.         pUnkOuter: IUnknown): HResult; stdcall;
  3715.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  3716.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  3717.     function CreateDevice(const rclsid: TRefClsID; lpDDS: IDirectDrawSurface;
  3718.         out lplpD3DDevice2: IDirect3DDevice2): HResult; stdcall;
  3719.   end;
  3720. {$ENDIF} // DIRECT3D_VERSION_5
  3721.  
  3722. {$IFDEF DIRECT3D_VERSION_6}
  3723.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D3);'}
  3724.   {$EXTERNALSYM IDirect3D3}
  3725.   IDirect3D3 = interface(IUnknown)
  3726.     ['{bb223240-e72b-11d0-a9b4-00aa00c0993e}']
  3727.     (*** IDirect3D3 methods ***)
  3728.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback;
  3729.         lpUserArg: pointer): HResult; stdcall;
  3730.     function CreateLight(var lplpDirect3Dlight: IDirect3DLight;
  3731.         pUnkOuter: IUnknown): HResult; stdcall;
  3732.     function CreateMaterial(var lplpDirect3DMaterial3: IDirect3DMaterial3;
  3733.         pUnkOuter: IUnknown): HResult; stdcall;
  3734.     function CreateViewport(var lplpD3DViewport3: IDirect3DViewport3;
  3735.         pUnkOuter: IUnknown): HResult; stdcall;
  3736.     function FindDevice(var lpD3DFDS: TD3DFindDeviceSearch;
  3737.         var lpD3DFDR: TD3DFindDeviceResult): HResult; stdcall;
  3738.     function CreateDevice(const rclsid: TRefClsID; lpDDS: IDirectDrawSurface4;
  3739.         out lplpD3DDevice: IDirect3DDevice3; pUnkOuter: IUnknown): HResult; stdcall;
  3740.     function CreateVertexBuffer(var lpVBDesc: TD3DVertexBufferDesc;
  3741.         var lpD3DVertexBuffer: IDirect3DVertexBuffer;
  3742.         dwFlags: DWORD; pUnkOuter: IUnknown): HResult; stdcall;
  3743.     function EnumZBufferFormats(const riidDevice: TRefClsID; lpEnumCallback:
  3744.         TD3DEnumPixelFormatsCallback; lpContext: Pointer): HResult; stdcall;
  3745.     function EvictManagedTextures : HResult; stdcall;
  3746.   end;
  3747. {$ENDIF} // DIRECT3D_VERSION_6
  3748.  
  3749. {$IFDEF DIRECT3D_VERSION_7}
  3750.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3D7);'}
  3751.   {$EXTERNALSYM IDirect3D7}
  3752.   IDirect3D7 = interface(IUnknown)
  3753.     ['{f5049e77-4861-11d2-a407-00a0c90629a8}']
  3754.     (*** IDirect3D7 methods ***)
  3755.     function EnumDevices(lpEnumDevicesCallback: TD3DEnumDevicesCallback7;
  3756.         lpUserArg: pointer): HResult; stdcall;
  3757.     function CreateDevice(const rclsid: TGUID; lpDDS: IDirectDrawSurface7;
  3758.         out lplpD3DDevice: IDirect3DDevice7): HResult; stdcall;
  3759.     function CreateVertexBuffer(const lpVBDesc: TD3DVertexBufferDesc;
  3760.         out lplpD3DVertexBuffer: IDirect3DVertexBuffer7;
  3761.         dwFlags: DWORD): HResult; stdcall;
  3762.     function EnumZBufferFormats(const riidDevice: TGUID; lpEnumCallback:
  3763.         TD3DEnumPixelFormatsCallback; lpContext: pointer): HResult; stdcall;
  3764.     function EvictManagedTextures : HResult; stdcall;
  3765.   end;
  3766. {$ENDIF} // DIRECT3D_VERSION_7
  3767.  
  3768. (*
  3769.  * Direct3D Device interfaces
  3770.  *)
  3771.  
  3772.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice);'}
  3773.   {$EXTERNALSYM IDirect3DDevice}
  3774.   IDirect3DDevice = interface(IUnknown)
  3775.     ['{64108800-957d-11d0-89ab-00a0c9054129}']
  3776.     (*** IDirect3DDevice methods ***)
  3777.     function Initialize(lpd3d: IDirect3D; lpGUID: PGUID;
  3778.         var lpd3ddvdesc: TD3DDeviceDesc): HResult; stdcall;
  3779.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  3780.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  3781.     function SwapTextureHandles(lpD3DTex1: IDirect3DTexture;
  3782.         lpD3DTex2: IDirect3DTexture): HResult; stdcall;
  3783.     function CreateExecuteBuffer(var lpDesc: TD3DExecuteBufferDesc ;
  3784.         var lplpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  3785.         pUnkOuter: IUnknown): HResult; stdcall;
  3786.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  3787.     function Execute(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  3788.         lpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD): HResult; stdcall;
  3789.     function AddViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
  3790.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport): HResult; stdcall;
  3791.     function NextViewport(lpDirect3DViewport: IDirect3DViewport;
  3792.         var lplpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD): HResult; stdcall;
  3793.     function Pick(lpDirect3DExecuteBuffer: IDirect3DExecuteBuffer;
  3794.         lpDirect3DViewport: IDirect3DViewport; dwFlags: DWORD;
  3795.         var lpRect: TD3DRect): HResult; stdcall;
  3796.     function GetPickRecords(var lpCount: DWORD;
  3797.         var lpD3DPickRec: TD3DPickRecord): HResult; stdcall;
  3798.     function EnumTextureFormats(lpd3dEnumTextureProc:
  3799.         TD3DEnumTextureFormatsCallback; lpArg: Pointer):
  3800.         HResult; stdcall;
  3801.     function CreateMatrix(var lpD3DMatHandle: TD3DMatrixHandle): HResult; stdcall;
  3802.     function SetMatrix(d3dMatHandle: TD3DMatrixHandle;
  3803.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3804.     function GetMatrix(var lpD3DMatHandle: TD3DMatrixHandle;
  3805.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3806.     function DeleteMatrix(d3dMatHandle: TD3DMatrixHandle): HResult; stdcall;
  3807.     function BeginScene: HResult; stdcall;
  3808.     function EndScene: HResult; stdcall;
  3809.     function GetDirect3D(var lpD3D: IDirect3D): HResult; stdcall;
  3810.   end;
  3811.  
  3812. {$IFDEF DIRECT3D_VERSION_5}
  3813.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice2);'}
  3814.   {$EXTERNALSYM IDirect3DDevice2}
  3815.   IDirect3DDevice2 = interface(IUnknown)
  3816.     ['{93281501-8cf8-11d0-89ab-00a0c9054129}']
  3817.     (*** IDirect3DDevice2 methods ***)
  3818.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  3819.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  3820.     function SwapTextureHandles(lpD3DTex1: IDirect3DTexture2;
  3821.         lpD3DTex2: IDirect3DTexture2): HResult; stdcall;
  3822.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  3823.     function AddViewport(lpDirect3DViewport2: IDirect3DViewport2): HResult; stdcall;
  3824.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport2): HResult; stdcall;
  3825.     function NextViewport(lpDirect3DViewport: IDirect3DViewport2;
  3826.         var lplpDirect3DViewport: IDirect3DViewport2; dwFlags: DWORD):
  3827.         HResult; stdcall;
  3828.     function EnumTextureFormats(
  3829.         lpd3dEnumTextureProc: TD3DEnumTextureFormatsCallback; lpArg: Pointer):
  3830.         HResult; stdcall;
  3831.     function BeginScene: HResult; stdcall;
  3832.     function EndScene: HResult; stdcall;
  3833.     function GetDirect3D(var lpD3D: IDirect3D2): HResult; stdcall;
  3834.  
  3835.     (*** DrawPrimitive API ***)
  3836.     function SetCurrentViewport(lpd3dViewport2: IDirect3DViewport2)
  3837.         : HResult; stdcall;
  3838.     function GetCurrentViewport(var lplpd3dViewport2: IDirect3DViewport2)
  3839.         : HResult; stdcall;
  3840.  
  3841.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface)
  3842.         : HResult; stdcall;
  3843.     function GetRenderTarget(var lplpNewRenderTarget: IDirectDrawSurface)
  3844.         : HResult; stdcall;
  3845.  
  3846.     function Begin_(d3dpt: TD3DPrimitiveType; d3dvt: TD3DVertexType;
  3847.         dwFlags: DWORD): HResult; stdcall;
  3848.     function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType; dvtVertexType:
  3849.         TD3DVertexType; lpvVertices: pointer; dwNumVertices: DWORD;
  3850.         dwFlags: DWORD): HResult; stdcall;
  3851.     function Vertex(lpVertexType: pointer): HResult;  stdcall;
  3852.     function Index(wVertexIndex: WORD): HResult;  stdcall;
  3853.     function End_(dwFlags: DWORD): HResult; stdcall;
  3854.  
  3855.     function GetRenderState(dwRenderStateType: TD3DRenderStateType;
  3856.         var lpdwRenderState): HResult; stdcall;
  3857.     function SetRenderState(dwRenderStateType: TD3DRenderStateType;
  3858.         dwRenderState: DWORD): HResult; stdcall;
  3859.     function GetLightState(dwLightStateType: TD3DLightStateType;
  3860.         var lpdwLightState): HResult; stdcall;
  3861.     function SetLightState(dwLightStateType: TD3DLightStateType;
  3862.         dwLightState: DWORD): HResult; stdcall;
  3863.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  3864.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3865.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  3866.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3867.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  3868.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3869.  
  3870.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  3871.         dvtVertexType: TD3DVertexType; var lpvVertices; dwVertexCount,
  3872.         dwFlags: DWORD): HResult; stdcall;
  3873.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  3874.         dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwVertexCount: DWORD;
  3875.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  3876.     function SetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  3877.     function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  3878.   end;
  3879. {$ENDIF} // DIRECT3D_VERSION_5
  3880.  
  3881. {$IFDEF DIRECT3D_VERSION_6}
  3882.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice3);'}
  3883.   {$EXTERNALSYM IDirect3DDevice3}
  3884.   IDirect3DDevice3 = interface(IUnknown)
  3885.     ['{b0ab3b60-33d7-11d1-a981-00c04fd7b174}']
  3886.     (*** IDirect3DDevice2 methods ***)
  3887.     function GetCaps(var lpD3DHWDevDesc: TD3DDeviceDesc;
  3888.         var lpD3DHELDevDesc: TD3DDeviceDesc): HResult; stdcall;
  3889.     function GetStats(var lpD3DStats: TD3DStats): HResult; stdcall;
  3890.     function AddViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
  3891.     function DeleteViewport(lpDirect3DViewport: IDirect3DViewport3): HResult; stdcall;
  3892.     function NextViewport(lpDirect3DViewport: IDirect3DViewport3;
  3893.         var lplpAnotherViewport: IDirect3DViewport3; dwFlags: DWORD): HResult; stdcall;
  3894.     function EnumTextureFormats(
  3895.         lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer):
  3896.         HResult; stdcall;
  3897.     function BeginScene: HResult; stdcall;
  3898.     function EndScene: HResult; stdcall;
  3899.     function GetDirect3D(var lpD3D: IDirect3D3): HResult; stdcall;
  3900.     function SetCurrentViewport(lpd3dViewport: IDirect3DViewport3)
  3901.         : HResult; stdcall;
  3902.     function GetCurrentViewport(var lplpd3dViewport: IDirect3DViewport3)
  3903.         : HResult; stdcall;
  3904.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface4)
  3905.         : HResult; stdcall;
  3906.     function GetRenderTarget(var lplpNewRenderTarget: IDirectDrawSurface4)
  3907.         : HResult; stdcall;
  3908.     function Begin_(d3dpt: TD3DPrimitiveType; dwVertexTypeDesc: DWORD;
  3909.         dwFlags: DWORD): HResult; stdcall;
  3910.     function BeginIndexed(dptPrimitiveType: TD3DPrimitiveType;
  3911.         dwVertexTypeDesc: DWORD; lpvVertices: pointer; dwNumVertices: DWORD;
  3912.         dwFlags: DWORD): HResult; stdcall;
  3913.     function Vertex(lpVertex: pointer): HResult;  stdcall;
  3914.     function Index(wVertexIndex: WORD): HResult;  stdcall;
  3915.     function End_(dwFlags: DWORD): HResult; stdcall;
  3916.     function GetRenderState(dwRenderStateType: TD3DRenderStateType;
  3917.         var lpdwRenderState): HResult; stdcall;
  3918.     function SetRenderState(dwRenderStateType: TD3DRenderStateType;
  3919.         dwRenderState: DWORD): HResult; stdcall;
  3920.     function GetLightState(dwLightStateType: TD3DLightStateType;
  3921.         var lpdwLightState): HResult; stdcall;
  3922.     function SetLightState(dwLightStateType: TD3DLightStateType;
  3923.         dwLightState: DWORD): HResult; stdcall;
  3924.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  3925.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3926.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  3927.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3928.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  3929.         var lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3930.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  3931.         dwVertexTypeDesc: DWORD; const lpvVertices;
  3932.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  3933.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  3934.         dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
  3935.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  3936.     function SetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  3937.     function GetClipStatus(var lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  3938.     function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  3939.         dwVertexTypeDesc : DWORD;
  3940.         var lpVertexArray: TD3DDrawPrimitiveStridedData;
  3941.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  3942.     function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  3943.         dwVertexTypeDesc : DWORD;
  3944.         var lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
  3945.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  3946.     function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  3947.         lpd3dVertexBuffer: IDirect3DVertexBuffer;
  3948.         dwStartVertex, dwNumVertices, dwFlags: DWORD): HResult; stdcall;
  3949.     function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  3950.         lpd3dVertexBuffer: IDirect3DVertexBuffer; var lpwIndices: WORD;
  3951.         dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  3952.     function ComputeSphereVisibility(var lpCenters: TD3DVector;
  3953.         var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
  3954.         var lpdwReturnValues: DWORD): HResult; stdcall;
  3955.     function GetTexture(dwStage: DWORD; var lplpTexture: IDirect3DTexture2)
  3956.         : HResult; stdcall;
  3957.     function SetTexture(dwStage: DWORD; lplpTexture: IDirect3DTexture2)
  3958.         : HResult; stdcall;
  3959.     function GetTextureStageState(dwStage: DWORD;
  3960.         dwState: TD3DTextureStageStateType; var lpdwValue: DWORD): HResult; stdcall;
  3961.     function SetTextureStageState(dwStage: DWORD;
  3962.         dwState: TD3DTextureStageStateType; lpdwValue: DWORD): HResult; stdcall;
  3963.     function ValidateDevice(var lpdwExtraPasses: DWORD): HResult; stdcall;
  3964.   end;
  3965. {$ENDIF} // DIRECT3D_VERSION_6
  3966.  
  3967. {$IFDEF DIRECT3D_VERSION_7}
  3968.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DDevice7);'}
  3969.   {$EXTERNALSYM IDirect3DDevice7}
  3970.   IDirect3DDevice7 = interface(IUnknown)
  3971.     ['{f5049e79-4861-11d2-a407-00a0c90629a8}']
  3972.     (*** IDirect3DDevice7 methods ***)
  3973.     function GetCaps(out lpD3DDevDesc: TD3DDeviceDesc7): HResult; stdcall;
  3974.     function EnumTextureFormats(lpd3dEnumPixelProc: TD3DEnumPixelFormatsCallback; lpArg: Pointer): HResult; stdcall;
  3975.     function BeginScene: HResult; stdcall;
  3976.     function EndScene: HResult; stdcall;
  3977.     function GetDirect3D(out lpD3D: IDirect3D7): HResult; stdcall;
  3978.     function SetRenderTarget(lpNewRenderTarget: IDirectDrawSurface7; dwFlags: DWORD): HResult; stdcall;
  3979.     function GetRenderTarget(out lplpRenderTarget: IDirectDrawSurface7): HResult; stdcall;
  3980.     function Clear(dwCount: DWORD; lpRects: PD3DRect; dwFlags, dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
  3981.     function SetTransform(dtstTransformStateType: TD3DTransformStateType;
  3982.         const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3983.     function GetTransform(dtstTransformStateType: TD3DTransformStateType;
  3984.         out lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3985.     function SetViewport(const lpViewport: TD3DViewport7): HResult; stdcall;
  3986.     function MultiplyTransform(dtstTransformStateType: TD3DTransformStateType;
  3987.         const lpD3DMatrix: TD3DMatrix): HResult; stdcall;
  3988.     function GetViewport(out lpViewport: TD3DViewport7): HResult; stdcall;
  3989.     function SetMaterial(const lpMaterial: TD3DMaterial7): HResult; stdcall;
  3990.     function GetMaterial(out lpMaterial: TD3DMaterial7): HResult; stdcall;
  3991.     function SetLight(dwLightIndex: DWORD; const lpLight: TD3DLight7): HResult; stdcall;
  3992.     function GetLight(dwLightIndex: DWORD; out lpLight: TD3DLight7): HResult; stdcall;
  3993.     function SetRenderState(dwRenderStateType: TD3DRenderStateType; dwRenderState: DWORD): HResult; stdcall;
  3994.     function GetRenderState(dwRenderStateType: TD3DRenderStateType; out dwRenderState: DWORD): HResult; stdcall;
  3995.     function BeginStateBlock : HResult; stdcall;
  3996.     function EndStateBlock(out lpdwBlockHandle: DWORD): HResult; stdcall;
  3997.     function PreLoad(lpddsTexture: IDirectDrawSurface7): HResult; stdcall;
  3998.     function DrawPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  3999.         dwVertexTypeDesc: DWORD; const lpvVertices;
  4000.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  4001.     function DrawIndexedPrimitive(dptPrimitiveType: TD3DPrimitiveType;
  4002.         dwVertexTypeDesc: DWORD; const lpvVertices; dwVertexCount: DWORD;
  4003.         const lpwIndices; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  4004.     function SetClipStatus(const lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  4005.     function GetClipStatus(out lpD3DClipStatus: TD3DClipStatus): HResult; stdcall;
  4006.     function DrawPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  4007.         dwVertexTypeDesc : DWORD;
  4008.         const lpVertexArray: TD3DDrawPrimitiveStridedData;
  4009.         dwVertexCount, dwFlags: DWORD): HResult; stdcall;
  4010.     function DrawIndexedPrimitiveStrided(dptPrimitiveType: TD3DPrimitiveType;
  4011.         dwVertexTypeDesc : DWORD;
  4012.         const lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexCount: DWORD;
  4013.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  4014.     function DrawPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  4015.         lpd3dVertexBuffer: IDirect3DVertexBuffer7;
  4016.         dwStartVertex, dwNumVertices, dwFlags: DWORD): HResult; stdcall;
  4017.     function DrawIndexedPrimitiveVB(dptPrimitiveType: TD3DPrimitiveType;
  4018.         lpd3dVertexBuffer: IDirect3DVertexBuffer7; dwStartVertex, dwNumVertices: DWORD;
  4019.         var lpwIndices: WORD; dwIndexCount, dwFlags: DWORD): HResult; stdcall;
  4020.     function ComputeSphereVisibility(const lpCenters: TD3DVector;
  4021.         var lpRadii: TD3DValue; dwNumSpheres, dwFlags: DWORD;
  4022.         var lpdwReturnValues: DWORD): HResult; stdcall;
  4023.     function GetTexture(dwStage: DWORD; out lplpTexture: IDirectDrawSurface7): HResult; stdcall;
  4024.     function SetTexture(dwStage: DWORD; lpTexture: IDirectDrawSurface7): HResult; stdcall;
  4025.     function GetTextureStageState(dwStage: DWORD;
  4026.         dwState: TD3DTextureStageStateType; out lpdwValue: DWORD): HResult; stdcall;
  4027.     function SetTextureStageState(dwStage: DWORD;
  4028.         dwState: TD3DTextureStageStateType; lpdwValue: DWORD): HResult; stdcall;
  4029.     function ValidateDevice(out lpdwExtraPasses: DWORD): HResult; stdcall;
  4030.     function ApplyStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  4031.     function CaptureStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  4032.     function DeleteStateBlock(dwBlockHandle: DWORD): HResult; stdcall;
  4033.     function CreateStateBlock(d3dsbType: TD3DStateBlockType; out lpdwBlockHandle: DWORD): HResult; stdcall;
  4034.     function Load(lpDestTex: IDirectDrawSurface7; lpDestPoint: PPoint;
  4035.         lpSrcTex: IDirectDrawSurface7; lprcSrcRect: PRect; dwFlags: DWORD): HResult; stdcall;
  4036.     function LightEnable(dwLightIndex: DWORD; bEnable: BOOL): HResult; stdcall;
  4037.     function GetLightEnable(dwLightIndex: DWORD; out bEnable: BOOL): HResult; stdcall;
  4038.     function SetClipPlane(dwIndex: DWORD; pPlaneEquation: PD3DValue): HResult; stdcall;
  4039.     function GetClipPlane(dwIndex: DWORD; pPlaneEquation: PD3DValue): HResult; stdcall;
  4040.     function GetInfo(dwDevInfoID: DWORD; pDevInfoStruct: Pointer; dwSize: DWORD): HResult; stdcall;
  4041.   end;
  4042. {$ENDIF} // DIRECT3D_VERSION_7
  4043.  
  4044. (*
  4045.  * Execute Buffer interface
  4046.  *)
  4047.  
  4048.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DExecuteBuffer);'}
  4049.   {$EXTERNALSYM IDirect3DExecuteBuffer}
  4050.   IDirect3DExecuteBuffer = interface(IUnknown)
  4051.     ['{4417C145-33AD-11CF-816F-0000C020156E}']
  4052.     (*** IDirect3DExecuteBuffer methods ***)
  4053.     function Initialize(lpDirect3DDevice: IDirect3DDevice;
  4054.         var lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
  4055.     function Lock(var lpDesc: TD3DExecuteBufferDesc): HResult; stdcall;
  4056.     function Unlock: HResult; stdcall;
  4057.     function SetExecuteData(var lpData: TD3DExecuteData): HResult; stdcall;
  4058.     function GetExecuteData(var lpData: TD3DExecuteData): HResult; stdcall;
  4059.     function Validate(var lpdwOffset: DWORD; lpFunc: TD3DValidateCallback;
  4060.         lpUserArg: Pointer; dwReserved: DWORD): HResult; stdcall;
  4061.     (*** Warning!  Optimize is defined differently in the header files
  4062.          and the online documentation ***)
  4063.     function Optimize(dwFlags: DWORD): HResult; stdcall;
  4064.   end;
  4065.  
  4066. (*
  4067.  * Light interfaces
  4068.  *)
  4069.  
  4070.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DLight);'}
  4071.   {$EXTERNALSYM IDirect3DLight}
  4072.   IDirect3DLight = interface(IUnknown)
  4073.     ['{4417C142-33AD-11CF-816F-0000C020156E}']
  4074.     (*** IDirect3DLight methods ***)
  4075.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  4076.     function SetLight(var lpLight: TD3DLight2): HResult; stdcall;
  4077.     function GetLight(var lpLight: TD3DLight2): HResult; stdcall;
  4078.   end;
  4079.  
  4080. (*
  4081.  * Material interfaces
  4082.  *)
  4083.  
  4084.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial);'}
  4085.   {$EXTERNALSYM IDirect3DMaterial}
  4086.   IDirect3DMaterial = interface(IUnknown)
  4087.     ['{4417C144-33AD-11CF-816F-0000C020156E}']
  4088.     (*** IDirect3DMaterial methods ***)
  4089.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  4090.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4091.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4092.     function GetHandle(lpDirect3DDevice: IDirect3DDevice;
  4093.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  4094.     function Reserve: HResult; stdcall;
  4095.     function Unreserve: HResult; stdcall;
  4096.   end;
  4097.  
  4098. {$IFDEF DIRECT3D_VERSION_5}
  4099.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial2);'}
  4100.   {$EXTERNALSYM IDirect3DMaterial2}
  4101.   IDirect3DMaterial2 = interface(IUnknown)
  4102.     ['{93281503-8cf8-11d0-89ab-00a0c9054129}']
  4103.     (*** IDirect3DMaterial2 methods ***)
  4104.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4105.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4106.     function GetHandle(lpDirect3DDevice: IDirect3DDevice2;
  4107.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  4108.   end;
  4109. {$ENDIF} // DIRECT3D_VERSION_5
  4110.  
  4111. {$IFDEF DIRECT3D_VERSION_6}
  4112.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DMaterial3);'}
  4113.   {$EXTERNALSYM IDirect3DMaterial3}
  4114.   IDirect3DMaterial3 = interface(IUnknown)
  4115.     ['{ca9c46f4-d3c5-11d1-b75a-00600852b312}']
  4116.     (*** IDirect3DMaterial2 methods ***)
  4117.     function SetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4118.     function GetMaterial(var lpMat: TD3DMaterial): HResult; stdcall;
  4119.     function GetHandle(lpDirect3DDevice: IDirect3DDevice3;
  4120.         var lpHandle: TD3DMaterialHandle): HResult; stdcall;
  4121.   end;
  4122. {$ENDIF} // DIRECT3D_VERSION_6
  4123.  
  4124. (*
  4125.  * Texture interfaces
  4126.  *)
  4127.  
  4128.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture);'}
  4129.   {$EXTERNALSYM IDirect3DTexture}
  4130.   IDirect3DTexture = interface(IUnknown)
  4131.     ['{2CDCD9E0-25A0-11CF-A31A-00AA00B93356}']
  4132.     (*** IDirect3DTexture methods ***)
  4133.     function Initialize(lpD3DDevice: IDirect3DDevice;
  4134.         lpDDSurface: IDirectDrawSurface): HResult; stdcall;
  4135.     function GetHandle(lpDirect3DDevice: IDirect3DDevice;
  4136.         var lpHandle: TD3DTextureHandle): HResult; stdcall;
  4137.     function PaletteChanged(dwStart: DWORD; dwCount: DWORD): HResult; stdcall;
  4138.     function Load(lpD3DTexture: IDirect3DTexture): HResult; stdcall;
  4139.     function Unload: HResult; stdcall;
  4140.   end;
  4141.  
  4142. {$IFDEF DIRECT3D_VERSION_5}
  4143.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DTexture2);'}
  4144.   {$EXTERNALSYM IDirect3DTexture2}
  4145.   IDirect3DTexture2 = interface(IUnknown)
  4146.     ['{93281502-8cf8-11d0-89ab-00a0c9054129}']
  4147.     (*** IDirect3DTexture2 methods ***)
  4148.     function GetHandle(lpDirect3DDevice: IDirect3DDevice2;
  4149.         var lpHandle: TD3DTextureHandle): HResult; stdcall;
  4150.     function PaletteChanged(dwStart: DWORD; dwCount: DWORD): HResult; stdcall;
  4151.     function Load(lpD3DTexture: IDirect3DTexture2): HResult; stdcall;
  4152.   end;
  4153. {$ENDIF} // DIRECT3D_VERSION_5
  4154.  
  4155. (*
  4156.  * Viewport interfaces
  4157.  *)
  4158.  
  4159.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport);'}
  4160.   {$EXTERNALSYM IDirect3DViewport}
  4161.   IDirect3DViewport = interface(IUnknown)
  4162.     ['{4417C146-33AD-11CF-816F-0000C020156E}']
  4163.     (*** IDirect3DViewport methods ***)
  4164.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  4165.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  4166.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  4167.     function TransformVertices(dwVertexCount: DWORD;
  4168.         const lpData: TD3DTransformData; dwFlags: DWORD;
  4169.         out lpOffscreen: DWORD): HResult; stdcall;
  4170.     function LightElements(dwElementCount: DWORD;
  4171.         var lpData: TD3DLightData): HResult; stdcall;
  4172.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  4173.     function GetBackground(out hMat: TD3DMaterialHandle): HResult; stdcall;
  4174.     function SetBackgroundDepth(lpDDSurface: IDirectDrawSurface):
  4175.         HResult; stdcall;
  4176.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  4177.         out lpValid: BOOL): HResult; stdcall;
  4178.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  4179.         HResult; stdcall;
  4180.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4181.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4182.      function NextLight(lpDirect3DLight: IDirect3DLight;
  4183.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  4184.   end;
  4185.  
  4186. {$IFDEF DIRECT3D_VERSION_5}
  4187.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport2);'}
  4188.   {$EXTERNALSYM IDirect3DViewport2}
  4189.   IDirect3DViewport2 = interface(IUnknown)
  4190.     ['{93281500-8cf8-11d0-89ab-00a0c9054129}']
  4191.     (*** IDirect3DViewport2 methods ***)
  4192.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  4193.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  4194.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  4195.     function TransformVertices(dwVertexCount: DWORD;
  4196.         const lpData: TD3DTransformData; dwFlags: DWORD;
  4197.         out lpOffscreen: DWORD): HResult; stdcall;
  4198.     function LightElements(dwElementCount: DWORD;
  4199.         var lpData: TD3DLightData): HResult; stdcall;
  4200.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  4201.     function GetBackground(out hMat: TD3DMaterialHandle): HResult; stdcall;
  4202.     function SetBackgroundDepth(lpDDSurface: IDirectDrawSurface):
  4203.         HResult; stdcall;
  4204.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  4205.         out lpValid: BOOL): HResult; stdcall;
  4206.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  4207.         HResult; stdcall;
  4208.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4209.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4210.     function NextLight(lpDirect3DLight: IDirect3DLight;
  4211.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  4212.     (*** IDirect3DViewport2 methods ***)
  4213.     function GetViewport2(out lpData: TD3DViewport2): HResult; stdcall;
  4214.     function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
  4215.   end;
  4216. {$ENDIF} // DIRECT3D_VERSION_5
  4217.  
  4218. {$IFDEF DIRECT3D_VERSION_6}
  4219.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DViewport3);'}
  4220.   {$EXTERNALSYM IDirect3DViewport3}
  4221.   IDirect3DViewport3 = interface(IUnknown)
  4222.     ['{b0ab3b61-33d7-11d1-a981-00c04fd7b174}']
  4223.     (*** IDirect3DViewport3 methods ***)
  4224.     function Initialize(lpDirect3D: IDirect3D): HResult; stdcall;
  4225.     function GetViewport(out lpData: TD3DViewport): HResult; stdcall;
  4226.     function SetViewport(const lpData: TD3DViewport): HResult; stdcall;
  4227.     function TransformVertices(dwVertexCount: DWORD;
  4228.         const lpData: TD3DTransformData; dwFlags: DWORD;
  4229.         out lpOffscreen: DWORD): HResult; stdcall;
  4230.     function LightElements(dwElementCount: DWORD;
  4231.         var lpData: TD3DLightData): HResult; stdcall;
  4232.     function SetBackground(hMat: TD3DMaterialHandle): HResult; stdcall;
  4233.     function GetBackground(var hMat: TD3DMaterialHandle): HResult; stdcall;
  4234.     function SetBackgroundDepth(
  4235.         lpDDSurface: IDirectDrawSurface): HResult; stdcall;
  4236.     function GetBackgroundDepth(out lplpDDSurface: IDirectDrawSurface;
  4237.         out lpValid: BOOL): HResult; stdcall;
  4238.     function Clear(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD):
  4239.         HResult; stdcall;
  4240.     function AddLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4241.     function DeleteLight(lpDirect3DLight: IDirect3DLight): HResult; stdcall;
  4242.     function NextLight(lpDirect3DLight: IDirect3DLight;
  4243.         out lplpDirect3DLight: IDirect3DLight; dwFlags: DWORD): HResult; stdcall;
  4244.     function GetViewport2(out lpData: TD3DViewport2): HResult; stdcall;
  4245.     function SetViewport2(const lpData: TD3DViewport2): HResult; stdcall;
  4246.     function SetBackgroundDepth2(
  4247.         lpDDSurface: IDirectDrawSurface4): HResult; stdcall;
  4248.     function GetBackgroundDepth2(out lplpDDSurface: IDirectDrawSurface4;
  4249.         out lpValid: BOOL): HResult; stdcall;
  4250.     function Clear2(dwCount: DWORD; const lpRects: TD3DRect; dwFlags: DWORD;
  4251.         dwColor: DWORD; dvZ: TD3DValue; dwStencil: DWORD): HResult; stdcall;
  4252.   end;
  4253. {$ENDIF} // DIRECT3D_VERSION_6
  4254.  
  4255. {$IFDEF DIRECT3D_VERSION_6}
  4256.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer);'}
  4257.   {$EXTERNALSYM IDirect3DVertexBuffer}
  4258.   IDirect3DVertexBuffer = interface(IUnknown)
  4259.     ['{7a503555-4a83-11d1-a5db-00a0c90367f8}']
  4260.     (*** IDirect3DVertexBuffer methods ***)
  4261.     function Lock(dwFlags: DWORD; var lplpData: pointer; var lpdwSize: DWORD)
  4262.         : HResult; stdcall;
  4263.     function Unlock : HResult; stdcall;
  4264.     function ProcessVertices(dwVertexOp, dwDestIndex, dwCount: DWORD;
  4265.         lpSrcBuffer: IDirect3DVertexBuffer; dwSrcIndex: DWORD;
  4266.         lpD3DDevice: IDirect3DDevice3; dwFlags: DWORD): HResult; stdcall;
  4267.     function GetVertexBufferDesc(var lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
  4268.     function Optimize(lpD3DDevice: IDirect3DDevice3; dwFlags: DWORD): HResult; stdcall;
  4269.   end;
  4270. {$ENDIF} // DIRECT3D_VERSION_6
  4271.  
  4272. {$IFDEF DIRECT3D_VERSION_7}
  4273.   {$HPPEMIT 'DECLARE_DINTERFACE_TYPE(IDirect3DVertexBuffer7);'}
  4274.   {$EXTERNALSYM IDirect3DVertexBuffer7}
  4275.   IDirect3DVertexBuffer7 = interface(IUnknown)
  4276.     ['{f5049e7d-4861-11d2-a407-00a0c90629a8}']
  4277.     (*** IDirect3DVertexBuffer methods ***)
  4278.     function Lock(dwFlags: DWORD; out lplpData: Pointer; out lpdwSize: DWORD): HResult; stdcall;
  4279.     function Unlock : HResult; stdcall;
  4280.     function ProcessVertices(dwVertexOp, dwDestIndex, dwCount: DWORD;
  4281.         lpSrcBuffer: IDirect3DVertexBuffer7; dwSrcIndex: DWORD;
  4282.         lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  4283.     function GetVertexBufferDesc(out lpVBDesc: TD3DVertexBufferDesc): HResult; stdcall;
  4284.     function Optimize(lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  4285.     function ProcessVerticesStrided(dwVertexOp, dwDestIndex, dwCount: DWORD;
  4286.       lpVertexArray: TD3DDrawPrimitiveStridedData; dwVertexTypeDesc: DWORD;
  4287.       lpD3DDevice: IDirect3DDevice7; dwFlags: DWORD): HResult; stdcall;
  4288.   end;
  4289. {$ENDIF} // DIRECT3D_VERSION_7
  4290.  
  4291. {$IFDEF DIRECT3D_VERSION_5}
  4292. const
  4293. (****************************************************************************
  4294.  *
  4295.  * Flags for IDirect3DDevice::NextViewport
  4296.  *
  4297.  ****************************************************************************)
  4298.  
  4299. (*
  4300.  * Return the next viewport
  4301.  *)
  4302.   D3DNEXT_NEXT =    $00000001;
  4303.   {$EXTERNALSYM D3DNEXT_NEXT}
  4304.  
  4305. (*
  4306.  * Return the first viewport
  4307.  *)
  4308.   D3DNEXT_HEAD =    $00000002;
  4309.   {$EXTERNALSYM D3DNEXT_HEAD}
  4310.  
  4311. (*
  4312.  * Return the last viewport
  4313.  *)
  4314.   D3DNEXT_TAIL =    $00000004;
  4315.   {$EXTERNALSYM D3DNEXT_TAIL}
  4316.  
  4317.  
  4318. (****************************************************************************
  4319.  *
  4320.  * Flags for DrawPrimitive/DrawIndexedPrimitive
  4321.  *   Also valid for Begin/BeginIndexed
  4322.  *   Also valid for VertexBuffer::CreateVertexBuffer
  4323.  ****************************************************************************)
  4324.  
  4325. (*
  4326.  * Wait until the device is ready to draw the primitive
  4327.  * This will cause DP to not return DDERR_WASSTILLDRAWING
  4328.  *)
  4329.   D3DDP_WAIT =                    $00000001;
  4330.   {$EXTERNALSYM D3DDP_WAIT}
  4331.  
  4332. {$IFDEF DIRECT3D_VERSION_LESS_6}
  4333. (*
  4334.  * Hint that it is acceptable to render the primitive out of order.
  4335.  *)
  4336.   D3DDP_OUTOFORDER            = $00000002;
  4337.   {$EXTERNALSYM D3DDP_OUTOFORDER}
  4338. {$ENDIF} // DIRECT3D_VERSION_LESS_6
  4339.  
  4340. (*
  4341.  * Hint that the primitives have been clipped by the application.
  4342.  *)
  4343.   D3DDP_DONOTCLIP =                $00000004;
  4344.   {$EXTERNALSYM D3DDP_DONOTCLIP}
  4345.  
  4346. (*
  4347.  * Hint that the extents need not be updated.
  4348.  *)
  4349.   D3DDP_DONOTUPDATEEXTENTS =    $00000008;
  4350.   {$EXTERNALSYM D3DDP_DONOTUPDATEEXTENTS}
  4351. {$ENDIF} // DIRECT3D_VERSION_5
  4352.  
  4353. {$IFDEF DIRECT3D_VERSION_6}
  4354.  
  4355. (*
  4356.  * Hint that the lighting should not be applied on vertices.
  4357.  *)
  4358.  
  4359.   D3DDP_DONOTLIGHT            = $00000010;
  4360.   {$EXTERNALSYM D3DDP_DONOTLIGHT}
  4361.  
  4362. {$ENDIF} // DIRECT3D_VERSION_6
  4363.  
  4364.  
  4365. (*
  4366.  * Direct3D Errors
  4367.  * DirectDraw error codes are used when errors not specified here.
  4368.  *)
  4369.  
  4370. const
  4371.   MAKE_DDHRESULT = HResult($88760000);
  4372.   {$EXTERNALSYM MAKE_DDHRESULT}
  4373.  
  4374.   D3D_OK                          = DD_OK;
  4375.   {$EXTERNALSYM D3D_OK}
  4376.   D3DERR_BADMAJORVERSION          = MAKE_DDHRESULT + 700;
  4377.   {$EXTERNALSYM D3DERR_BADMAJORVERSION}
  4378.   D3DERR_BADMINORVERSION          = MAKE_DDHRESULT + 701;
  4379.   {$EXTERNALSYM D3DERR_BADMINORVERSION}
  4380.  
  4381. {$IFDEF DIRECT3D_VERSION_5}
  4382. (*
  4383.  * An invalid device was requested by the application.
  4384.  *)
  4385.   D3DERR_INVALID_DEVICE   = MAKE_DDHRESULT + 705;
  4386.   {$EXTERNALSYM D3DERR_INVALID_DEVICE}
  4387.   D3DERR_INITFAILED       = MAKE_DDHRESULT + 706;
  4388.   {$EXTERNALSYM D3DERR_INITFAILED}
  4389.  
  4390. (*
  4391.  * SetRenderTarget attempted on a device that was
  4392.  * QI'd off the render target.
  4393.  *)
  4394.   D3DERR_DEVICEAGGREGATED = MAKE_DDHRESULT + 707;
  4395.   {$EXTERNALSYM D3DERR_DEVICEAGGREGATED}
  4396. {$ENDIF} // DIRECT3D_VERSION_5
  4397.  
  4398.   D3DERR_EXECUTE_CREATE_FAILED    = MAKE_DDHRESULT + 710;
  4399.   {$EXTERNALSYM D3DERR_EXECUTE_CREATE_FAILED}
  4400.   D3DERR_EXECUTE_DESTROY_FAILED   = MAKE_DDHRESULT + 711;
  4401.   {$EXTERNALSYM D3DERR_EXECUTE_DESTROY_FAILED}
  4402.   D3DERR_EXECUTE_LOCK_FAILED      = MAKE_DDHRESULT + 712;
  4403.   {$EXTERNALSYM D3DERR_EXECUTE_LOCK_FAILED}
  4404.   D3DERR_EXECUTE_UNLOCK_FAILED    = MAKE_DDHRESULT + 713;
  4405.   {$EXTERNALSYM D3DERR_EXECUTE_UNLOCK_FAILED}
  4406.   D3DERR_EXECUTE_LOCKED           = MAKE_DDHRESULT + 714;
  4407.   {$EXTERNALSYM D3DERR_EXECUTE_LOCKED}
  4408.   D3DERR_EXECUTE_NOT_LOCKED       = MAKE_DDHRESULT + 715;
  4409.   {$EXTERNALSYM D3DERR_EXECUTE_NOT_LOCKED}
  4410.  
  4411.   D3DERR_EXECUTE_FAILED           = MAKE_DDHRESULT + 716;
  4412.   {$EXTERNALSYM D3DERR_EXECUTE_FAILED}
  4413.   D3DERR_EXECUTE_CLIPPED_FAILED   = MAKE_DDHRESULT + 717;
  4414.   {$EXTERNALSYM D3DERR_EXECUTE_CLIPPED_FAILED}
  4415.  
  4416.   D3DERR_TEXTURE_NO_SUPPORT       = MAKE_DDHRESULT + 720;
  4417.   {$EXTERNALSYM D3DERR_TEXTURE_NO_SUPPORT}
  4418.   D3DERR_TEXTURE_CREATE_FAILED    = MAKE_DDHRESULT + 721;
  4419.   {$EXTERNALSYM D3DERR_TEXTURE_CREATE_FAILED}
  4420.   D3DERR_TEXTURE_DESTROY_FAILED   = MAKE_DDHRESULT + 722;
  4421.   {$EXTERNALSYM D3DERR_TEXTURE_DESTROY_FAILED}
  4422.   D3DERR_TEXTURE_LOCK_FAILED      = MAKE_DDHRESULT + 723;
  4423.   {$EXTERNALSYM D3DERR_TEXTURE_LOCK_FAILED}
  4424.   D3DERR_TEXTURE_UNLOCK_FAILED    = MAKE_DDHRESULT + 724;
  4425.   {$EXTERNALSYM D3DERR_TEXTURE_UNLOCK_FAILED}
  4426.   D3DERR_TEXTURE_LOAD_FAILED      = MAKE_DDHRESULT + 725;
  4427.   {$EXTERNALSYM D3DERR_TEXTURE_LOAD_FAILED}
  4428.   D3DERR_TEXTURE_SWAP_FAILED      = MAKE_DDHRESULT + 726;
  4429.   {$EXTERNALSYM D3DERR_TEXTURE_SWAP_FAILED}
  4430.   D3DERR_TEXTURE_LOCKED           = MAKE_DDHRESULT + 727;
  4431.   {$EXTERNALSYM D3DERR_TEXTURE_LOCKED}
  4432.   D3DERR_TEXTURE_NOT_LOCKED       = MAKE_DDHRESULT + 728;
  4433.   {$EXTERNALSYM D3DERR_TEXTURE_NOT_LOCKED}
  4434.   D3DERR_TEXTURE_GETSURF_FAILED   = MAKE_DDHRESULT + 729;
  4435.   {$EXTERNALSYM D3DERR_TEXTURE_GETSURF_FAILED}
  4436.  
  4437.   D3DERR_MATRIX_CREATE_FAILED     = MAKE_DDHRESULT + 730;
  4438.   {$EXTERNALSYM D3DERR_MATRIX_CREATE_FAILED}
  4439.   D3DERR_MATRIX_DESTROY_FAILED    = MAKE_DDHRESULT + 731;
  4440.   {$EXTERNALSYM D3DERR_MATRIX_DESTROY_FAILED}
  4441.   D3DERR_MATRIX_SETDATA_FAILED    = MAKE_DDHRESULT + 732;
  4442.   {$EXTERNALSYM D3DERR_MATRIX_SETDATA_FAILED}
  4443.   D3DERR_MATRIX_GETDATA_FAILED    = MAKE_DDHRESULT + 733;
  4444.   {$EXTERNALSYM D3DERR_MATRIX_GETDATA_FAILED}
  4445.   D3DERR_SETVIEWPORTDATA_FAILED   = MAKE_DDHRESULT + 734;
  4446.   {$EXTERNALSYM D3DERR_SETVIEWPORTDATA_FAILED}
  4447.  
  4448. {$IFDEF DIRECT3D_VERSION_5}
  4449.   D3DERR_INVALIDCURRENTVIEWPORT   = MAKE_DDHRESULT + 735;
  4450.   {$EXTERNALSYM D3DERR_INVALIDCURRENTVIEWPORT}
  4451.   D3DERR_INVALIDPRIMITIVETYPE     = MAKE_DDHRESULT + 736;
  4452.   {$EXTERNALSYM D3DERR_INVALIDPRIMITIVETYPE}
  4453.   D3DERR_INVALIDVERTEXTYPE        = MAKE_DDHRESULT + 737;
  4454.   {$EXTERNALSYM D3DERR_INVALIDVERTEXTYPE}
  4455.   D3DERR_TEXTURE_BADSIZE          = MAKE_DDHRESULT + 738;
  4456.   {$EXTERNALSYM D3DERR_TEXTURE_BADSIZE}
  4457.   D3DERR_INVALIDRAMPTEXTURE      = MAKE_DDHRESULT + 739;
  4458.   {$EXTERNALSYM D3DERR_INVALIDRAMPTEXTURE}
  4459. {$ENDIF} // DIRECT3D_VERSION_5
  4460.  
  4461.   D3DERR_MATERIAL_CREATE_FAILED   = MAKE_DDHRESULT + 740;
  4462.   {$EXTERNALSYM D3DERR_MATERIAL_CREATE_FAILED}
  4463.   D3DERR_MATERIAL_DESTROY_FAILED  = MAKE_DDHRESULT + 741;
  4464.   {$EXTERNALSYM D3DERR_MATERIAL_DESTROY_FAILED}
  4465.   D3DERR_MATERIAL_SETDATA_FAILED  = MAKE_DDHRESULT + 742;
  4466.   {$EXTERNALSYM D3DERR_MATERIAL_SETDATA_FAILED}
  4467.   D3DERR_MATERIAL_GETDATA_FAILED  = MAKE_DDHRESULT + 743;
  4468.   {$EXTERNALSYM D3DERR_MATERIAL_GETDATA_FAILED}
  4469.  
  4470. {$IFDEF DIRECT3D_VERSION_5}
  4471.   D3DERR_INVALIDPALETTE              = MAKE_DDHRESULT + 744;
  4472.   {$EXTERNALSYM D3DERR_INVALIDPALETTE}
  4473.  
  4474.   D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY = MAKE_DDHRESULT + 745;
  4475.   {$EXTERNALSYM D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY}
  4476.   D3DERR_ZBUFF_NEEDS_VIDEOMEMORY  = MAKE_DDHRESULT + 746;
  4477.   {$EXTERNALSYM D3DERR_ZBUFF_NEEDS_VIDEOMEMORY}
  4478.   D3DERR_SURFACENOTINVIDMEM       = MAKE_DDHRESULT + 747;
  4479.   {$EXTERNALSYM D3DERR_SURFACENOTINVIDMEM}
  4480. {$ENDIF} // DIRECT3D_VERSION_5
  4481.  
  4482.   D3DERR_LIGHT_SET_FAILED         = MAKE_DDHRESULT + 750;
  4483.   {$EXTERNALSYM D3DERR_LIGHT_SET_FAILED}
  4484. {$IFDEF DIRECT3D_VERSION_5}
  4485.   D3DERR_LIGHTHASVIEWPORT      = MAKE_DDHRESULT + 751;
  4486.   {$EXTERNALSYM D3DERR_LIGHTHASVIEWPORT}
  4487.   D3DERR_LIGHTNOTINTHISVIEWPORT   = MAKE_DDHRESULT + 752;
  4488.   {$EXTERNALSYM D3DERR_LIGHTNOTINTHISVIEWPORT}
  4489. {$ENDIF} // DIRECT3D_VERSION_5
  4490.  
  4491.   D3DERR_SCENE_IN_SCENE           = MAKE_DDHRESULT + 760;
  4492.   {$EXTERNALSYM D3DERR_SCENE_IN_SCENE}
  4493.   D3DERR_SCENE_NOT_IN_SCENE       = MAKE_DDHRESULT + 761;
  4494.   {$EXTERNALSYM D3DERR_SCENE_NOT_IN_SCENE}
  4495.   D3DERR_SCENE_BEGIN_FAILED       = MAKE_DDHRESULT + 762;
  4496.   {$EXTERNALSYM D3DERR_SCENE_BEGIN_FAILED}
  4497.   D3DERR_SCENE_END_FAILED         = MAKE_DDHRESULT + 763;
  4498.   {$EXTERNALSYM D3DERR_SCENE_END_FAILED}
  4499.  
  4500. {$IFDEF DIRECT3D_VERSION_5}
  4501.   D3DERR_INBEGIN                  = MAKE_DDHRESULT + 770;
  4502.   {$EXTERNALSYM D3DERR_INBEGIN}
  4503.   D3DERR_NOTINBEGIN               = MAKE_DDHRESULT + 771;
  4504.   {$EXTERNALSYM D3DERR_NOTINBEGIN}
  4505.   D3DERR_NOVIEWPORTS              = MAKE_DDHRESULT + 772;
  4506.   {$EXTERNALSYM D3DERR_NOVIEWPORTS}
  4507.   D3DERR_VIEWPORTDATANOTSET       = MAKE_DDHRESULT + 773;
  4508.   {$EXTERNALSYM D3DERR_VIEWPORTDATANOTSET}
  4509.   D3DERR_VIEWPORTHASNODEVICE      = MAKE_DDHRESULT + 774;
  4510.   {$EXTERNALSYM D3DERR_VIEWPORTHASNODEVICE}
  4511.   D3DERR_NOCURRENTVIEWPORT        = MAKE_DDHRESULT + 775;
  4512.   {$EXTERNALSYM D3DERR_NOCURRENTVIEWPORT}
  4513. {$ENDIF} // DIRECT3D_VERSION_5
  4514.  
  4515. {$IFDEF DIRECT3D_VERSION_6}
  4516.   D3DERR_INVALIDVERTEXFORMAT      = MAKE_DDHRESULT + 2048;
  4517.   {$EXTERNALSYM D3DERR_INVALIDVERTEXFORMAT}
  4518.  
  4519. (*
  4520.  * Attempted to CreateTexture on a surface that had a color key
  4521.  *)
  4522.   D3DERR_COLORKEYATTACHED                 = MAKE_DDHRESULT + 2050;
  4523.   {$EXTERNALSYM D3DERR_COLORKEYATTACHED}
  4524.  
  4525.   D3DERR_VERTEXBUFFEROPTIMIZED            = MAKE_DDHRESULT + 2060;
  4526.   {$EXTERNALSYM D3DERR_VERTEXBUFFEROPTIMIZED}
  4527.   D3DERR_VBUF_CREATE_FAILED               = MAKE_DDHRESULT + 2061;
  4528.   {$EXTERNALSYM D3DERR_VBUF_CREATE_FAILED}
  4529.   D3DERR_VERTEXBUFFERLOCKED               = MAKE_DDHRESULT + 2062;
  4530.   {$EXTERNALSYM D3DERR_VERTEXBUFFERLOCKED}
  4531.  
  4532.   D3DERR_ZBUFFER_NOTPRESENT               = MAKE_DDHRESULT + 2070;
  4533.   {$EXTERNALSYM D3DERR_ZBUFFER_NOTPRESENT}
  4534.   D3DERR_STENCILBUFFER_NOTPRESENT         = MAKE_DDHRESULT + 2071;
  4535.   {$EXTERNALSYM D3DERR_STENCILBUFFER_NOTPRESENT}
  4536.  
  4537.   D3DERR_WRONGTEXTUREFORMAT               = MAKE_DDHRESULT + 2072;
  4538.   {$EXTERNALSYM D3DERR_WRONGTEXTUREFORMAT}
  4539.   D3DERR_UNSUPPORTEDCOLOROPERATION        = MAKE_DDHRESULT + 2073;
  4540.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLOROPERATION}
  4541.   D3DERR_UNSUPPORTEDCOLORARG              = MAKE_DDHRESULT + 2074;
  4542.   {$EXTERNALSYM D3DERR_UNSUPPORTEDCOLORARG}
  4543.   D3DERR_UNSUPPORTEDALPHAOPERATION        = MAKE_DDHRESULT + 2075;
  4544.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAOPERATION}
  4545.   D3DERR_UNSUPPORTEDALPHAARG              = MAKE_DDHRESULT + 2076;
  4546.   {$EXTERNALSYM D3DERR_UNSUPPORTEDALPHAARG}
  4547.   D3DERR_TOOMANYOPERATIONS                = MAKE_DDHRESULT + 2077;
  4548.   {$EXTERNALSYM D3DERR_TOOMANYOPERATIONS}
  4549.   D3DERR_CONFLICTINGTEXTUREFILTER         = MAKE_DDHRESULT + 2078;
  4550.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREFILTER}
  4551.   D3DERR_UNSUPPORTEDFACTORVALUE           = MAKE_DDHRESULT + 2079;
  4552.   {$EXTERNALSYM D3DERR_UNSUPPORTEDFACTORVALUE}
  4553.   D3DERR_CONFLICTINGRENDERSTATE           = MAKE_DDHRESULT + 2081;
  4554.   {$EXTERNALSYM D3DERR_CONFLICTINGRENDERSTATE}
  4555.   D3DERR_UNSUPPORTEDTEXTUREFILTER         = MAKE_DDHRESULT + 2082;
  4556.   {$EXTERNALSYM D3DERR_UNSUPPORTEDTEXTUREFILTER}
  4557.   D3DERR_TOOMANYPRIMITIVES                = MAKE_DDHRESULT + 2083;
  4558.   {$EXTERNALSYM D3DERR_TOOMANYPRIMITIVES}
  4559.   D3DERR_INVALIDMATRIX                    = MAKE_DDHRESULT + 2084;
  4560.   {$EXTERNALSYM D3DERR_INVALIDMATRIX}
  4561.   D3DERR_TOOMANYVERTICES                  = MAKE_DDHRESULT + 2085;
  4562.   {$EXTERNALSYM D3DERR_TOOMANYVERTICES}
  4563.   D3DERR_CONFLICTINGTEXTUREPALETTE        = MAKE_DDHRESULT + 2086;
  4564.   {$EXTERNALSYM D3DERR_CONFLICTINGTEXTUREPALETTE}
  4565.  
  4566. {$ENDIF} // DIRECT3D_VERSION_6
  4567.  
  4568. {$IFDEF DIRECT3D_VERSION_7}
  4569.   D3DERR_INVALIDSTATEBLOCK        = MAKE_DDHRESULT + 2100;
  4570.   {$EXTERNALSYM D3DERR_INVALIDSTATEBLOCK}
  4571.   D3DERR_INBEGINSTATEBLOCK        = MAKE_DDHRESULT + 2101;
  4572.   {$EXTERNALSYM D3DERR_INBEGINSTATEBLOCK}
  4573.   D3DERR_NOTINBEGINSTATEBLOCK     = MAKE_DDHRESULT + 2102;
  4574.   {$EXTERNALSYM D3DERR_NOTINBEGINSTATEBLOCK}
  4575. {$ENDIF} // DIRECT3D_VERSION_7
  4576.  
  4577. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  4578.  
  4579. procedure DisableFPUExceptions;
  4580. procedure EnableFPUExceptions;
  4581.  
  4582. {$IFNDEF EXCLUDE_DXFILE_FROM_DIRECT3D}
  4583. (***************************************************************************
  4584.  *
  4585.  *  Copyright (C) 1998-1999 Microsoft Corporation.  All Rights Reserved.
  4586.  *
  4587.  *  File:       dxfile.h
  4588.  *
  4589.  *  Content:    DirectX File public header file
  4590.  *
  4591.  ***************************************************************************)
  4592.  
  4593. var
  4594.   DXFileDLL : HMODULE;
  4595.  
  4596. function DXFileErrorString(Value: HResult): string;
  4597.  
  4598. type
  4599.   TDXFileFormat = (
  4600.     DXFILEFORMAT_BINARY,
  4601.     DXFILEFORMAT_TEXT,
  4602.     DXFILEFORMAT_COMPRESSED
  4603.   );
  4604.  
  4605.   TDXFileLoadOptions = (
  4606.     DXFILELOAD_FROMFILE,
  4607.     DXFILELOAD_FROMRESOURCE,
  4608.     DXFILELOAD_FROMMEMORY,
  4609.     DXFILELOAD_INVALID_3,
  4610.     DXFILELOAD_FROMSTREAM,
  4611.     DXFILELOAD_INVALID_5,
  4612.     DXFILELOAD_INVALID_6,
  4613.     DXFILELOAD_INVALID_7,
  4614.     DXFILELOAD_FROMURL
  4615.   );
  4616.  
  4617.   PDXFileLoadResource = ^TDXFileLoadResource;
  4618.   TDXFileLoadResource = packed record
  4619.     hModule: HModule;
  4620.     lpName: PAnsiChar;
  4621.     lpType: PAnsiChar;
  4622.   end;
  4623.  
  4624.   PDXFileLoadMemory = ^TDXFileLoadMemory;
  4625.   TDXFileLoadMemory = packed record
  4626.     lpMemory: Pointer;
  4627.     dSize: DWORD;
  4628.   end;
  4629.  
  4630. (*
  4631.  * DirectX File object types.
  4632.  *)
  4633.  
  4634.   IDirectXFile = interface;
  4635.   IDirectXFileEnumObject = interface;
  4636.   IDirectXFileSaveObject = interface;
  4637.   IDirectXFileObject = interface;
  4638.   IDirectXFileData = interface;
  4639.   IDirectXFileDataReference = interface;
  4640.   IDirectXFileBinary = interface;
  4641.  
  4642. (*
  4643.  * DirectX File interfaces.
  4644.  *)
  4645.  
  4646.   IDirectXFile = interface(IUnknown)
  4647.     ['{3d82ab40-62da-11cf-ab39-0020af71e433}']
  4648.     function CreateEnumObject(pvSource: Pointer;
  4649.         dwLoadOptions: TDXFileLoadOptions;
  4650.         var ppEnumObj: IDirectXFileEnumObject): HResult; stdcall;
  4651.     function CreateSaveObject(szFileName: PChar; dwFileFormat: TDXFileFormat;
  4652.         var ppSaveObj: IDirectXFileSaveObject): HResult; stdcall;
  4653.     function RegisterTemplates(pvData: Pointer; cbSize: DWORD): HResult; stdcall;
  4654.   end;
  4655.  
  4656.   IDirectXFileEnumObject = interface(IUnknown)
  4657.     ['{3d82ab41-62da-11cf-ab39-0020af71e433}']
  4658.     function GetNextDataObject(var ppDataObj: IDirectXFileData): HResult; stdcall;
  4659.     function GetDataObjectById
  4660.         (const rguid: TGUID; var ppDataObj: IDirectXFileData): HResult; stdcall;
  4661.     function GetDataObjectByName
  4662.         (szName: PChar; var ppDataObj: IDirectXFileData): HResult; stdcall;
  4663.   end;
  4664.  
  4665.   IDirectXFileSaveObject = interface(IUnknown)
  4666.     ['{3d82ab42-62da-11cf-ab39-0020af71e433}']
  4667.     function SaveTemplates
  4668.         (cTemplates: DWORD; var ppguidTemplates: PGUID): HResult; stdcall;
  4669.     function CreateDataObject(const rguidTemplate: TGUID; szName: PChar;
  4670.         pguid: PGUID; cbSize: DWORD; pvData: Pointer;
  4671.         var ppDataObj: IDirectXFileData): HResult; stdcall;
  4672.     function SaveData(pDataObj: IDirectXFileData): HResult; stdcall;
  4673.   end;
  4674.  
  4675.   IDirectXFileObject = interface(IUnknown)
  4676.     ['{3d82ab43-62da-11cf-ab39-0020af71e433}']
  4677.     function GetName(pstrNameBuf: PChar; var dwBufLen: DWORD): HResult; stdcall;
  4678.     function GetId(var pGuidBuf: TGUID): HResult; stdcall;
  4679.   end;
  4680.  
  4681.   IDirectXFileData = interface(IDirectXFileObject)
  4682.     ['{3d82ab44-62da-11cf-ab39-0020af71e433}']
  4683.     function GetData
  4684.         (szMember: PChar; var pcbSize: DWORD; var ppvData: Pointer): HResult; stdcall;
  4685.     function GetType(var ppguid: PGUID): HResult; stdcall;
  4686.     function GetNextObject(var ppChildObj: IDirectXFileObject): HResult; stdcall;
  4687.     function AddDataObject(pDataObj: IDirectXFileData): HResult; stdcall;
  4688.     function AddDataReference(szRef: PChar; pguidRef: PGUID): HResult; stdcall;
  4689.     function AddBinaryObject(szName: PChar; pguid: PGUID; szMimeType: PChar;
  4690.         pvData: Pointer; cbSize: DWORD): HResult; stdcall;
  4691.   end;
  4692.  
  4693.   IDirectXFileDataReference = interface(IDirectXFileObject)
  4694.     ['{3d82ab45-62da-11cf-ab39-0020af71e433}']
  4695.     function Resolve(var ppDataObj: IDirectXFileData): HResult; stdcall;
  4696.   end;
  4697.  
  4698.   IDirectXFileBinary = interface(IDirectXFileObject)
  4699.     ['{3d82ab46-62da-11cf-ab39-0020af71e433}']
  4700.     function GetSize(var pcbSize: DWORD): HResult; stdcall;
  4701.     function GetMimeType(var pszMimeType: PChar): HResult; stdcall;
  4702.     function Read(pvData: Pointer; cbSize: DWORD; pcbRead: PDWORD{?}): HResult; stdcall;
  4703.   end;
  4704.  
  4705. const
  4706.  
  4707. (*
  4708.  * DirectXFile Object Class Id (for CoCreateInstance())
  4709.  *)
  4710.  
  4711.    CLSID_CDirectXFile: TGUID =
  4712.        (D1:$4516ec43;D2:$8f20;D3:$11d0;D4:($9b,$6d,$00,$00,$c0,$78,$1b,$c3));
  4713.  
  4714. (*
  4715.  * DirectX File Interface GUIDs.
  4716.  *)
  4717.  
  4718. type
  4719.   IID_IDirectXFile = IDirectXFile;
  4720.   IID_IDirectXFileEnumObject = IDirectXFileEnumObject;
  4721.   IID_IDirectXFileSaveObject = IDirectXFileSaveObject;
  4722.   IID_IDirectXFileObject = IDirectXFileObject;
  4723.   IID_IDirectXFileData = IDirectXFileData;
  4724.   IID_IDirectXFileDataReference = IDirectXFileDataReference;
  4725.   IID_IDirectXFileBinary = IDirectXFileBinary;
  4726.  
  4727. (*
  4728.  * DirectX File Header template's GUID.
  4729.  *)
  4730. const
  4731.   TID_DXFILEHeader: TGUID =
  4732.       (D1:$3d82ab43;D2:$62da;D3:$11cf;D4:($ab,$39,$00,$20,$af,$71,$e4,$33));
  4733.  
  4734. (*
  4735.  * DirectX File errors.
  4736.  *)
  4737.  
  4738. const
  4739.   DXFILE_OK = 0;
  4740.  
  4741.   DXFILEERR_BADOBJECT                 = MAKE_DDHRESULT or 850;
  4742.   DXFILEERR_BADVALUE                  = MAKE_DDHRESULT or 851;
  4743.   DXFILEERR_BADTYPE                   = MAKE_DDHRESULT or 852;
  4744.   DXFILEERR_BADSTREAMHANDLE           = MAKE_DDHRESULT or 853;
  4745.   DXFILEERR_BADALLOC                  = MAKE_DDHRESULT or 854;
  4746.   DXFILEERR_NOTFOUND                  = MAKE_DDHRESULT or 855;
  4747.   DXFILEERR_NOTDONEYET                = MAKE_DDHRESULT or 856;
  4748.   DXFILEERR_FILENOTFOUND              = MAKE_DDHRESULT or 857;
  4749.   DXFILEERR_RESOURCENOTFOUND          = MAKE_DDHRESULT or 858;
  4750.   DXFILEERR_URLNOTFOUND               = MAKE_DDHRESULT or 859;
  4751.   DXFILEERR_BADRESOURCE               = MAKE_DDHRESULT or 860;
  4752.   DXFILEERR_BADFILETYPE               = MAKE_DDHRESULT or 861;
  4753.   DXFILEERR_BADFILEVERSION            = MAKE_DDHRESULT or 862;
  4754.   DXFILEERR_BADFILEFLOATSIZE          = MAKE_DDHRESULT or 863;
  4755.   DXFILEERR_BADFILECOMPRESSIONTYPE    = MAKE_DDHRESULT or 864;
  4756.   DXFILEERR_BADFILE                   = MAKE_DDHRESULT or 865;
  4757.   DXFILEERR_PARSEERROR                = MAKE_DDHRESULT or 866;
  4758.   DXFILEERR_NOTEMPLATE                = MAKE_DDHRESULT or 867;
  4759.   DXFILEERR_BADARRAYSIZE              = MAKE_DDHRESULT or 868;
  4760.   DXFILEERR_BADDATAREFERENCE          = MAKE_DDHRESULT or 869;
  4761.   DXFILEERR_INTERNALERROR             = MAKE_DDHRESULT or 870;
  4762.   DXFILEERR_NOMOREOBJECTS             = MAKE_DDHRESULT or 871;
  4763.   DXFILEERR_BADINTRINSICS             = MAKE_DDHRESULT or 872;
  4764.   DXFILEERR_NOMORESTREAMHANDLES       = MAKE_DDHRESULT or 873;
  4765.   DXFILEERR_NOMOREDATA                = MAKE_DDHRESULT or 874;
  4766.   DXFILEERR_BADCACHEFILE              = MAKE_DDHRESULT or 875;
  4767.   DXFILEERR_NOINTERNET                = MAKE_DDHRESULT or 876;
  4768.  
  4769.  
  4770. (*
  4771.  * API for creating IDirectXFile interface.
  4772.  *)
  4773.  
  4774. var
  4775.   DirectXFileCreate : function
  4776.     (out lplpDirectXFile: IDirectXFile): HResult; stdcall;
  4777.  
  4778. (* D3DRM XFile templates in binary form *)
  4779. const
  4780.   D3DRM_XTEMPLATES: array [0..3214] of Byte = (
  4781.         $78, $6f, $66, $20, $30, $33, $30, $32, $62,
  4782.         $69, $6e, $20, $30, $30, $36, $34, $1f, 0, $1,
  4783.         0, $6, 0, 0, 0, $48, $65, $61, $64, $65,
  4784.         $72, $a, 0, $5, 0, $43, $ab, $82, $3d, $da,
  4785.         $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4,
  4786.         $33, $28, 0, $1, 0, $5, 0, 0, 0, $6d, 
  4787.         $61, $6a, $6f, $72, $14, 0, $28, 0, $1, 0, 
  4788.         $5, 0, 0, 0, $6d, $69, $6e, $6f, $72, $14, 
  4789.         0, $29, 0, $1, 0, $5, 0, 0, 0, $66, 
  4790.         $6c, $61, $67, $73, $14, 0, $b, 0, $1f, 0, 
  4791.         $1, 0, $6, 0, 0, 0, $56, $65, $63, $74, 
  4792.         $6f, $72, $a, 0, $5, 0, $5e, $ab, $82, $3d,
  4793.         $da, $62, $cf, $11, $ab, $39, 0, $20, $af, $71,
  4794.         $e4, $33, $2a, 0, $1, 0, $1, 0, 0, 0,
  4795.         $78, $14, 0, $2a, 0, $1, 0, $1, 0, 0,
  4796.         0, $79, $14, 0, $2a, 0, $1, 0, $1, 0,
  4797.         0, 0, $7a, $14, 0, $b, 0, $1f, 0, $1, 
  4798.         0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64, 
  4799.         $73, $32, $64, $a, 0, $5, 0, $44, $3f, $f2, 
  4800.         $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33, 
  4801.         $35, $94, $a3, $2a, 0, $1, 0, $1, 0, 0, 
  4802.         0, $75, $14, 0, $2a, 0, $1, 0, $1, 0, 
  4803.         0, 0, $76, $14, 0, $b, 0, $1f, 0, $1, 
  4804.         0, $9, 0, 0, 0, $4d, $61, $74, $72, $69, 
  4805.         $78, $34, $78, $34, $a, 0, $5, 0, $45, $3f, 
  4806.         $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, 
  4807.         $33, $35, $94, $a3, $34, 0, $2a, 0, $1, 0, 
  4808.         $6, 0, 0, 0, $6d, $61, $74, $72, $69, $78, 
  4809.         $e, 0, $3, 0, $10, 0, 0, 0, $f, 0, 
  4810.         $14, 0, $b, 0, $1f, 0, $1, 0, $9, 0, 
  4811.         0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, 
  4812.         $41, $a, 0, $5, 0, $e0, $44, $ff, $35, $7c, 
  4813.         $6c, $cf, $11, $8f, $52, 0, $40, $33, $35, $94, 
  4814.         $a3, $2a, 0, $1, 0, $3, 0, 0, 0, $72, 
  4815.         $65, $64, $14, 0, $2a, 0, $1, 0, $5, 0, 
  4816.         0, 0, $67, $72, $65, $65, $6e, $14, 0, $2a, 
  4817.         0, $1, 0, $4, 0, 0, 0, $62, $6c, $75, 
  4818.         $65, $14, 0, $2a, 0, $1, 0, $5, 0, 0, 
  4819.         0, $61, $6c, $70, $68, $61, $14, 0, $b, 0, 
  4820.         $1f, 0, $1, 0, $8, 0, 0, 0, $43, $6f,
  4821.         $6c, $6f, $72, $52, $47, $42, $a, 0, $5, 0, 
  4822.         $81, $6e, $e1, $d3, $35, $78, $cf, $11, $8f, $52, 
  4823.         0, $40, $33, $35, $94, $a3, $2a, 0, $1, 0,
  4824.         $3, 0, 0, 0, $72, $65, $64, $14, 0, $2a,
  4825.         0, $1, 0, $5, 0, 0, 0, $67, $72, $65, 
  4826.         $65, $6e, $14, 0, $2a, 0, $1, 0, $4, 0, 
  4827.         0, 0, $62, $6c, $75, $65, $14, 0, $b, 0, 
  4828.         $1f, 0, $1, 0, $c, 0, 0, 0, $49, $6e, 
  4829.         $64, $65, $78, $65, $64, $43, $6f, $6c, $6f, $72, 
  4830.         $a, 0, $5, 0, $20, $b8, $30, $16, $42, $78, 
  4831.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  4832.         $29, 0, $1, 0, $5, 0, 0, 0, $69, $6e, 
  4833.         $64, $65, $78, $14, 0, $1, 0, $9, 0, 0, 
  4834.         0, $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, 
  4835.         $1, 0, $a, 0, 0, 0, $69, $6e, $64, $65, 
  4836.         $78, $43, $6f, $6c, $6f, $72, $14, 0, $b, 0, 
  4837.         $1f, 0, $1, 0, $7, 0, 0, 0, $42, $6f, 
  4838.         $6f, $6c, $65, $61, $6e, $a, 0, $5, 0, $a0, 
  4839.         $a6, $7d, $53, $37, $ca, $d0, $11, $94, $1c, 0, 
  4840.         $80, $c8, $c, $fa, $7b, $29, 0, $1, 0, $9, 
  4841.         0, 0, 0, $74, $72, $75, $65, $66, $61, $6c, 
  4842.         $73, $65, $14, 0, $b, 0, $1f, 0, $1, 0, 
  4843.         $9, 0, 0, 0, $42, $6f, $6f, $6c, $65, $61, 
  4844.         $6e, $32, $64, $a, 0, $5, 0, $63, $ae, $85, 
  4845.         $48, $e8, $78, $cf, $11, $8f, $52, 0, $40, $33, 
  4846.         $35, $94, $a3, $1, 0, $7, 0, 0, 0, $42, 
  4847.         $6f, $6f, $6c, $65, $61, $6e, $1, 0, $1, 0, 
  4848.         0, 0, $75, $14, 0, $1, 0, $7, 0, 0, 
  4849.         0, $42, $6f, $6f, $6c, $65, $61, $6e, $1, 0, 
  4850.         $1, 0, 0, 0, $76, $14, 0, $b, 0, $1f, 
  4851.         0, $1, 0, $c, 0, 0, 0, $4d, $61, $74,
  4852.         $65, $72, $69, $61, $6c, $57, $72, $61, $70, $a, 
  4853.         0, $5, 0, $60, $ae, $85, $48, $e8, $78, $cf, 
  4854.         $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 
  4855.         0, $7, 0, 0, 0, $42, $6f, $6f, $6c, $65, 
  4856.         $61, $6e, $1, 0, $1, 0, 0, 0, $75, $14, 
  4857.         0, $1, 0, $7, 0, 0, 0, $42, $6f, $6f,
  4858.         $6c, $65, $61, $6e, $1, 0, $1, 0, 0, 0, 
  4859.         $76, $14, 0, $b, 0, $1f, 0, $1, 0, $f, 
  4860.         0, 0, 0, $54, $65, $78, $74, $75, $72, $65,
  4861.         $46, $69, $6c, $65, $6e, $61, $6d, $65, $a, 0, 
  4862.         $5, 0, $e1, $90, $27, $a4, $10, $78, $cf, $11, 
  4863.         $8f, $52, 0, $40, $33, $35, $94, $a3, $31, 0, 
  4864.         $1, 0, $8, 0, 0, 0, $66, $69, $6c, $65,
  4865.         $6e, $61, $6d, $65, $14, 0, $b, 0, $1f, 0, 
  4866.         $1, 0, $8, 0, 0, 0, $4d, $61, $74, $65, 
  4867.         $72, $69, $61, $6c, $a, 0, $5, 0, $4d, $ab, 
  4868.         $82, $3d, $da, $62, $cf, $11, $ab, $39, 0, $20, 
  4869.         $af, $71, $e4, $33, $1, 0, $9, 0, 0, 0, 
  4870.         $43, $6f, $6c, $6f, $72, $52, $47, $42, $41, $1, 
  4871.         0, $9, 0, 0, 0, $66, $61, $63, $65, $43, 
  4872.         $6f, $6c, $6f, $72, $14, 0, $2a, 0, $1, 0, 
  4873.         $5, 0, 0, 0, $70, $6f, $77, $65, $72, $14, 
  4874.         0, $1, 0, $8, 0, 0, 0, $43, $6f, $6c, 
  4875.         $6f, $72, $52, $47, $42, $1, 0, $d, 0, 0, 
  4876.         0, $73, $70, $65, $63, $75, $6c, $61, $72, $43, 
  4877.         $6f, $6c, $6f, $72, $14, 0, $1, 0, $8, 0, 
  4878.         0, 0, $43, $6f, $6c, $6f, $72, $52, $47, $42, 
  4879.         $1, 0, $d, 0, 0, 0, $65, $6d, $69, $73,
  4880.         $73, $69, $76, $65, $43, $6f, $6c, $6f, $72, $14, 
  4881.         0, $e, 0, $12, 0, $12, 0, $12, 0, $f, 
  4882.         0, $b, 0, $1f, 0, $1, 0, $8, 0, 0, 
  4883.         0, $4d, $65, $73, $68, $46, $61, $63, $65, $a, 
  4884.         0, $5, 0, $5f, $ab, $82, $3d, $da, $62, $cf, 
  4885.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29, 
  4886.         0, $1, 0, $12, 0, 0, 0, $6e, $46, $61, 
  4887.         $63, $65, $56, $65, $72, $74, $65, $78, $49, $6e, 
  4888.         $64, $69, $63, $65, $73, $14, 0, $34, 0, $29, 
  4889.         0, $1, 0, $11, 0, 0, 0, $66, $61, $63, 
  4890.         $65, $56, $65, $72, $74, $65, $78, $49, $6e, $64, 
  4891.         $69, $63, $65, $73, $e, 0, $1, 0, $12, 0, 
  4892.         0, 0, $6e, $46, $61, $63, $65, $56, $65, $72, 
  4893.         $74, $65, $78, $49, $6e, $64, $69, $63, $65, $73, 
  4894.         $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0,
  4895.         $d, 0, 0, 0, $4d, $65, $73, $68, $46, $61, 
  4896.         $63, $65, $57, $72, $61, $70, $73, $a, 0, $5, 
  4897.         0, $c0, $c5, $1e, $ed, $a8, $c0, $d0, $11, $94, 
  4898.         $1c, 0, $80, $c8, $c, $fa, $7b, $29, 0, $1, 
  4899.         0, $f, 0, 0, 0, $6e, $46, $61, $63, $65, 
  4900.         $57, $72, $61, $70, $56, $61, $6c, $75, $65, $73,
  4901.         $14, 0, $34, 0, $1, 0, $9, 0, 0, 0, 
  4902.         $42, $6f, $6f, $6c, $65, $61, $6e, $32, $64, $1, 
  4903.         0, $e, 0, 0, 0, $66, $61, $63, $65, $57, 
  4904.         $72, $61, $70, $56, $61, $6c, $75, $65, $73, $e,
  4905.         0, $1, 0, $f, 0, 0, 0, $6e, $46, $61, 
  4906.         $63, $65, $57, $72, $61, $70, $56, $61, $6c, $75, 
  4907.         $65, $73, $f, 0, $14, 0, $b, 0, $1f, 0,
  4908.         $1, 0, $11, 0, 0, 0, $4d, $65, $73, $68, 
  4909.         $54, $65, $78, $74, $75, $72, $65, $43, $6f, $6f, 
  4910.         $72, $64, $73, $a, 0, $5, 0, $40, $3f, $f2, 
  4911.         $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, $33, 
  4912.         $35, $94, $a3, $29, 0, $1, 0, $e, 0, 0, 
  4913.         0, $6e, $54, $65, $78, $74, $75, $72, $65, $43, 
  4914.         $6f, $6f, $72, $64, $73, $14, 0, $34, 0, $1, 
  4915.         0, $8, 0, 0, 0, $43, $6f, $6f, $72, $64, 
  4916.         $73, $32, $64, $1, 0, $d, 0, 0, 0, $74, 
  4917.         $65, $78, $74, $75, $72, $65, $43, $6f, $6f, $72, 
  4918.         $64, $73, $e, 0, $1, 0, $e, 0, 0, 0, 
  4919.         $6e, $54, $65, $78, $74, $75, $72, $65, $43, $6f, 
  4920.         $6f, $72, $64, $73, $f, 0, $14, 0, $b, 0, 
  4921.         $1f, 0, $1, 0, $10, 0, 0, 0, $4d, $65, 
  4922.         $73, $68, $4d, $61, $74, $65, $72, $69, $61, $6c, 
  4923.         $4c, $69, $73, $74, $a, 0, $5, 0, $42, $3f, 
  4924.         $f2, $f6, $86, $76, $cf, $11, $8f, $52, 0, $40, 
  4925.         $33, $35, $94, $a3, $29, 0, $1, 0, $a, 0, 
  4926.         0, 0, $6e, $4d, $61, $74, $65, $72, $69, $61, 
  4927.         $6c, $73, $14, 0, $29, 0, $1, 0, $c, 0, 
  4928.         0, 0, $6e, $46, $61, $63, $65, $49, $6e, $64, 
  4929.         $65, $78, $65, $73, $14, 0, $34, 0, $29, 0, 
  4930.         $1, 0, $b, 0, 0, 0, $66, $61, $63, $65, 
  4931.         $49, $6e, $64, $65, $78, $65, $73, $e, 0, $1,
  4932.         0, $c, 0, 0, 0, $6e, $46, $61, $63, $65, 
  4933.         $49, $6e, $64, $65, $78, $65, $73, $f, 0, $14, 
  4934.         0, $e, 0, $1, 0, $8, 0, 0, 0, $4d, 
  4935.         $61, $74, $65, $72, $69, $61, $6c, $f, 0, $b,
  4936.         0, $1f, 0, $1, 0, $b, 0, 0, 0, $4d, 
  4937.         $65, $73, $68, $4e, $6f, $72, $6d, $61, $6c, $73, 
  4938.         $a, 0, $5, 0, $43, $3f, $f2, $f6, $86, $76, 
  4939.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  4940.         $29, 0, $1, 0, $8, 0, 0, 0, $6e, $4e,
  4941.         $6f, $72, $6d, $61, $6c, $73, $14, 0, $34, 0, 
  4942.         $1, 0, $6, 0, 0, 0, $56, $65, $63, $74, 
  4943.         $6f, $72, $1, 0, $7, 0, 0, 0, $6e, $6f, 
  4944.         $72, $6d, $61, $6c, $73, $e, 0, $1, 0, $8,
  4945.         0, 0, 0, $6e, $4e, $6f, $72, $6d, $61, $6c, 
  4946.         $73, $f, 0, $14, 0, $29, 0, $1, 0, $c, 
  4947.         0, 0, 0, $6e, $46, $61, $63, $65, $4e, $6f, 
  4948.         $72, $6d, $61, $6c, $73, $14, 0, $34, 0, $1, 
  4949.         0, $8, 0, 0, 0, $4d, $65, $73, $68, $46, 
  4950.         $61, $63, $65, $1, 0, $b, 0, 0, 0, $66, 
  4951.         $61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, 
  4952.         $e, 0, $1, 0, $c, 0, 0, 0, $6e, $46, 
  4953.         $61, $63, $65, $4e, $6f, $72, $6d, $61, $6c, $73, 
  4954.         $f, 0, $14, 0, $b, 0, $1f, 0, $1, 0, 
  4955.         $10, 0, 0, 0, $4d, $65, $73, $68, $56, $65, 
  4956.         $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, $73, 
  4957.         $a, 0, $5, 0, $21, $b8, $30, $16, $42, $78, 
  4958.         $cf, $11, $8f, $52, 0, $40, $33, $35, $94, $a3, 
  4959.         $29, 0, $1, 0, $d, 0, 0, 0, $6e, $56, 
  4960.         $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, 
  4961.         $73, $14, 0, $34, 0, $1, 0, $c, 0, 0, 
  4962.         0, $49, $6e, $64, $65, $78, $65, $64, $43, $6f, 
  4963.         $6c, $6f, $72, $1, 0, $c, 0, 0, 0, $76,
  4964.         $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, $72, 
  4965.         $73, $e, 0, $1, 0, $d, 0, 0, 0, $6e, 
  4966.         $56, $65, $72, $74, $65, $78, $43, $6f, $6c, $6f, 
  4967.         $72, $73, $f, 0, $14, 0, $b, 0, $1f, 0, 
  4968.         $1, 0, $4, 0, 0, 0, $4d, $65, $73, $68,
  4969.         $a, 0, $5, 0, $44, $ab, $82, $3d, $da, $62, 
  4970.         $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, 
  4971.         $29, 0, $1, 0, $9, 0, 0, 0, $6e, $56, 
  4972.         $65, $72, $74, $69, $63, $65, $73, $14, 0, $34, 
  4973.         0, $1, 0, $6, 0, 0, 0, $56, $65, $63, 
  4974.         $74, $6f, $72, $1, 0, $8, 0, 0, 0, $76, 
  4975.         $65, $72, $74, $69, $63, $65, $73, $e, 0, $1, 
  4976.         0, $9, 0, 0, 0, $6e, $56, $65, $72, $74, 
  4977.         $69, $63, $65, $73, $f, 0, $14, 0, $29, 0, 
  4978.         $1, 0, $6, 0, 0, 0, $6e, $46, $61, $63, 
  4979.         $65, $73, $14, 0, $34, 0, $1, 0, $8, 0, 
  4980.         0, 0, $4d, $65, $73, $68, $46, $61, $63, $65,
  4981.         $1, 0, $5, 0, 0, 0, $66, $61, $63, $65, 
  4982.         $73, $e, 0, $1, 0, $6, 0, 0, 0, $6e, 
  4983.         $46, $61, $63, $65, $73, $f, 0, $14, 0, $e, 
  4984.         0, $12, 0, $12, 0, $12, 0, $f, 0, $b,
  4985.         0, $1f, 0, $1, 0, $14, 0, 0, 0, $46, 
  4986.         $72, $61, $6d, $65, $54, $72, $61, $6e, $73, $66, 
  4987.         $6f, $72, $6d, $4d, $61, $74, $72, $69, $78, $a, 
  4988.         0, $5, 0, $41, $3f, $f2, $f6, $86, $76, $cf, 
  4989.         $11, $8f, $52, 0, $40, $33, $35, $94, $a3, $1, 
  4990.         0, $9, 0, 0, 0, $4d, $61, $74, $72, $69, 
  4991.         $78, $34, $78, $34, $1, 0, $b, 0, 0, 0,
  4992.         $66, $72, $61, $6d, $65, $4d, $61, $74, $72, $69, 
  4993.         $78, $14, 0, $b, 0, $1f, 0, $1, 0, $5, 
  4994.         0, 0, 0, $46, $72, $61, $6d, $65, $a, 0, 
  4995.         $5, 0, $46, $ab, $82, $3d, $da, $62, $cf, $11, 
  4996.         $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 0, 
  4997.         $12, 0, $12, 0, $12, 0, $f, 0, $b, 0, 
  4998.         $1f, 0, $1, 0, $9, 0, 0, 0, $46, $6c, 
  4999.         $6f, $61, $74, $4b, $65, $79, $73, $a, 0, $5, 
  5000.         0, $a9, $46, $dd, $10, $5b, $77, $cf, $11, $8f, 
  5001.         $52, 0, $40, $33, $35, $94, $a3, $29, 0, $1, 
  5002.         0, $7, 0, 0, 0, $6e, $56, $61, $6c, $75, 
  5003.         $65, $73, $14, 0, $34, 0, $2a, 0, $1, 0, 
  5004.         $6, 0, 0, 0, $76, $61, $6c, $75, $65, $73, 
  5005.         $e, 0, $1, 0, $7, 0, 0, 0, $6e, $56,
  5006.         $61, $6c, $75, $65, $73, $f, 0, $14, 0, $b, 
  5007.         0, $1f, 0, $1, 0, $e, 0, 0, 0, $54, 
  5008.         $69, $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, 
  5009.         $65, $79, $73, $a, 0, $5, 0, $80, $b1, $6, 
  5010.         $f4, $3b, $7b, $cf, $11, $8f, $52, 0, $40, $33, 
  5011.         $35, $94, $a3, $29, 0, $1, 0, $4, 0, 0, 
  5012.         0, $74, $69, $6d, $65, $14, 0, $1, 0, $9, 
  5013.         0, 0, 0, $46, $6c, $6f, $61, $74, $4b, $65, 
  5014.         $79, $73, $1, 0, $6, 0, 0, 0, $74, $66, 
  5015.         $6b, $65, $79, $73, $14, 0, $b, 0, $1f, 0, 
  5016.         $1, 0, $c, 0, 0, 0, $41, $6e, $69, $6d, 
  5017.         $61, $74, $69, $6f, $6e, $4b, $65, $79, $a, 0, 
  5018.         $5, 0, $a8, $46, $dd, $10, $5b, $77, $cf, $11, 
  5019.         $8f, $52, 0, $40, $33, $35, $94, $a3, $29, 0,
  5020.         $1, 0, $7, 0, 0, 0, $6b, $65, $79, $54,
  5021.         $79, $70, $65, $14, 0, $29, 0, $1, 0, $5, 
  5022.         0, 0, 0, $6e, $4b, $65, $79, $73, $14, 0, 
  5023.         $34, 0, $1, 0, $e, 0, 0, 0, $54, $69, 
  5024.         $6d, $65, $64, $46, $6c, $6f, $61, $74, $4b, $65,
  5025.         $79, $73, $1, 0, $4, 0, 0, 0, $6b, $65, 
  5026.         $79, $73, $e, 0, $1, 0, $5, 0, 0, 0, 
  5027.         $6e, $4b, $65, $79, $73, $f, 0, $14, 0, $b, 
  5028.         0, $1f, 0, $1, 0, $10, 0, 0, 0, $41, 
  5029.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $4f, $70, 
  5030.         $74, $69, $6f, $6e, $73, $a, 0, $5, 0, $c0, 
  5031.         $56, $bf, $e2, $f, $84, $cf, $11, $8f, $52, 0, 
  5032.         $40, $33, $35, $94, $a3, $29, 0, $1, 0, $a, 
  5033.         0, 0, 0, $6f, $70, $65, $6e, $63, $6c, $6f, 
  5034.         $73, $65, $64, $14, 0, $29, 0, $1, 0, $f, 
  5035.         0, 0, 0, $70, $6f, $73, $69, $74, $69, $6f, 
  5036.         $6e, $71, $75, $61, $6c, $69, $74, $79, $14, 0, 
  5037.         $b, 0, $1f, 0, $1, 0, $9, 0, 0, 0, 
  5038.         $41, $6e, $69, $6d, $61, $74, $69, $6f, $6e, $a, 
  5039.         0, $5, 0, $4f, $ab, $82, $3d, $da, $62, $cf, 
  5040.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $e, 
  5041.         0, $12, 0, $12, 0, $12, 0, $f, 0, $b, 
  5042.         0, $1f, 0, $1, 0, $c, 0, 0, 0, $41,
  5043.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $53, $65, 
  5044.         $74, $a, 0, $5, 0, $50, $ab, $82, $3d, $da, 
  5045.         $62, $cf, $11, $ab, $39, 0, $20, $af, $71, $e4, 
  5046.         $33, $e, 0, $1, 0, $9, 0, 0, 0, $41, 
  5047.         $6e, $69, $6d, $61, $74, $69, $6f, $6e, $f, 0,
  5048.         $b, 0, $1f, 0, $1, 0, $a, 0, 0, 0, 
  5049.         $49, $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, 
  5050.         $a, 0, $5, 0, $a0, $ee, $23, $3a, $b1, $94, 
  5051.         $d0, $11, $ab, $39, 0, $20, $af, $71, $e4, $33, 
  5052.         $e, 0, $1, 0, $6, 0, 0, 0, $42, $49, 
  5053.         $4e, $41, $52, $59, $f, 0, $b, 0, $1f, 0, 
  5054.         $1, 0, $3, 0, 0, 0, $55, $72, $6c, $a, 
  5055.         0, $5, 0, $a1, $ee, $23, $3a, $b1, $94, $d0, 
  5056.         $11, $ab, $39, 0, $20, $af, $71, $e4, $33, $29, 
  5057.         0, $1, 0, $5, 0, 0, 0, $6e, $55, $72, 
  5058.         $6c, $73, $14, 0, $34, 0, $31, 0, $1, 0, 
  5059.         $4, 0, 0, 0, $75, $72, $6c, $73, $e, 0, 
  5060.         $1, 0, $5, 0, 0, 0, $6e, $55, $72, $6c,
  5061.         $73, $f, 0, $14, 0, $b, 0, $1f, 0, $1, 
  5062.         0, $f, 0, 0, 0, $50, $72, $6f, $67, $72, 
  5063.         $65, $73, $73, $69, $76, $65, $4d, $65, $73, $68, 
  5064.         $a, 0, $5, 0, $60, $c3, $63, $8a, $7d, $99,
  5065.         $d0, $11, $94, $1c, 0, $80, $c8, $c, $fa, $7b, 
  5066.         $e, 0, $1, 0, $3, 0, 0, 0, $55, $72, 
  5067.         $6c, $13, 0, $1, 0, $a, 0, 0, 0, $49, 
  5068.         $6e, $6c, $69, $6e, $65, $44, $61, $74, $61, $f, 
  5069.         0, $b, 0, $1f, 0, $1, 0, $4, 0, 0, 
  5070.         0, $47, $75, $69, $64, $a, 0, $5, 0, $e0, 
  5071.         $90, $27, $a4, $10, $78, $cf, $11, $8f, $52, 0, 
  5072.         $40, $33, $35, $94, $a3, $29, 0, $1, 0, $5, 
  5073.         0, 0, 0, $64, $61, $74, $61, $31, $14, 0, 
  5074.         $28, 0, $1, 0, $5, 0, 0, 0, $64, $61, 
  5075.         $74, $61, $32, $14, 0, $28, 0, $1, 0, $5,
  5076.         0, 0, 0, $64, $61, $74, $61, $33, $14, 0, 
  5077.         $34, 0, $2d, 0, $1, 0, $5, 0, 0, 0, 
  5078.         $64, $61, $74, $61, $34, $e, 0, $3, 0, $8, 
  5079.         0, 0, 0, $f, 0, $14, 0, $b, 0, $1f,
  5080.         0, $1, 0, $e, 0, 0, 0, $53, $74, $72,
  5081.         $69, $6e, $67, $50, $72, $6f, $70, $65, $72, $74,
  5082.         $79, $a, 0, $5, 0, $e0, $21, $f, $7f, $e1,
  5083.         $bf, $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72,
  5084.         $71, $31, 0, $1, 0, $3, 0, 0, 0, $6b,
  5085.         $65, $79, $14, 0, $31, 0, $1, 0, $5, 0,
  5086.         0, 0, $76, $61, $6c, $75, $65, $14, 0, $b,
  5087.         0, $1f, 0, $1, 0, $b, 0, 0, 0, $50,
  5088.         $72, $6f, $70, $65, $72, $74, $79, $42, $61, $67,
  5089.         $a, 0, $5, 0, $e1, $21, $f, $7f, $e1, $bf,
  5090.         $d1, $11, $82, $c0, 0, $a0, $c9, $69, $72, $71,
  5091.         $e, 0, $1, 0, $e, 0, 0, 0, $53, $74,
  5092.         $72, $69, $6e, $67, $50, $72, $6f, $70, $65, $72,
  5093.         $74, $79, $f, 0, $b, 0, $1f, 0, $1, 0,
  5094.         $e, 0, 0, 0, $45, $78, $74, $65, $72, $6e,
  5095.         $61, $6c, $56, $69, $73, $75, $61, $6c, $a, 0,
  5096.         $5, 0, $a0, $6a, $11, $98, $ba, $bd, $d1, $11,
  5097.         $82, $c0, 0, $a0, $c9, $69, $72, $71, $1, 0,
  5098.         $4, 0, 0, 0, $47, $75, $69, $64, $1, 0,
  5099.         $12, 0, 0, 0, $67, $75, $69, $64, $45, $78,
  5100.         $74, $65, $72, $6e, $61, $6c, $56, $69, $73, $75,
  5101.         $61, $6c, $14, 0, $e, 0, $12, 0, $12, 0,
  5102.         $12, 0, $f, 0, $b, 0);
  5103. {$ENDIF}
  5104.  
  5105. implementation
  5106.  
  5107. {$IFDEF DIRECT3D_VERSION_LESS_8}
  5108. {$IFDEF DIRECT3D_VERSION_7}
  5109.  
  5110. function D3DFVF_TEXCOORDSIZE3(CoordIndex: DWORD): DWORD;
  5111. begin
  5112.   Result := (D3DFVF_TEXTUREFORMAT3 shl (CoordIndex*2 + 16));
  5113. end;
  5114.  
  5115. function D3DFVF_TEXCOORDSIZE2(CoordIndex: DWORD): DWORD;
  5116. begin
  5117.   Result := (D3DFVF_TEXTUREFORMAT2);
  5118. end;
  5119.  
  5120. function D3DFVF_TEXCOORDSIZE4(CoordIndex: DWORD): DWORD;
  5121. begin
  5122.   Result := (D3DFVF_TEXTUREFORMAT4 shl (CoordIndex*2 + 16));
  5123. end;
  5124.  
  5125. function D3DFVF_TEXCOORDSIZE1(CoordIndex: DWORD): DWORD;
  5126. begin
  5127.   Result := (D3DFVF_TEXTUREFORMAT1 shl (CoordIndex*2 + 16));
  5128. end;
  5129.  
  5130. {$ENDIF} // DIRECT3D_VERSION_7
  5131. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  5132.  
  5133. function D3DVal(val: variant): Single;
  5134. begin
  5135.   Result := val;
  5136. end;
  5137.  
  5138. function D3DDivide(a, b: double): Single;
  5139. begin
  5140.   Result := a / b;
  5141. end;
  5142.  
  5143. function D3DMultiply(a, b: double): Single;
  5144. begin
  5145.   Result := a * b;
  5146. end;
  5147.  
  5148. // #define CI_GETALPHA(ci)    ((ci) >> 24)
  5149. function CI_GETALPHA(ci: DWORD): DWORD;
  5150. begin
  5151.   Result := ci shr 24;
  5152. end;
  5153.  
  5154. // #define CI_GETINDEX(ci)    (((ci) >> 8) & 0xffff)
  5155. function CI_GETINDEX(ci: DWORD): DWORD;
  5156. begin
  5157.   Result := (ci shr 8) and $ffff;
  5158. end;
  5159.  
  5160. // #define CI_GETFRACTION(ci) ((ci) & 0xff)
  5161. function CI_GETFRACTION(ci: DWORD): DWORD;
  5162. begin
  5163.   Result := ci and $ff;
  5164. end;
  5165.  
  5166. // #define CI_ROUNDINDEX(ci)  CI_GETINDEX((ci) + 0x80)
  5167. function CI_ROUNDINDEX(ci: DWORD): DWORD;
  5168. begin
  5169.   Result := CI_GETINDEX(ci + $80);
  5170. end;
  5171.  
  5172. // #define CI_MASKALPHA(ci)   ((ci) & 0xffffff)
  5173. function CI_MASKALPHA(ci: DWORD): DWORD;
  5174. begin
  5175.   Result := ci and $ffffff;
  5176. end;
  5177.  
  5178. // #define CI_MAKE(a, i, f)    (((a) << 24) | ((i) << 8) | (f))
  5179. function CI_MAKE(a,i,f: DWORD): DWORD;
  5180. begin
  5181.   Result := (a shl 24) or (i shl 8) or f;
  5182. end;
  5183.  
  5184. // #define RGBA_GETALPHA(rgb)      ((rgb) >> 24)
  5185. function RGBA_GETALPHA(rgb: TD3DColor): DWORD;
  5186. begin
  5187.   Result := rgb shr 24;
  5188. end;
  5189.  
  5190. // #define RGBA_GETRED(rgb)        (((rgb) >> 16) & 0xff)
  5191. function RGBA_GETRED(rgb: TD3DColor): DWORD;
  5192. begin
  5193.   Result := (rgb shr 16) and $ff;
  5194. end;
  5195.  
  5196. // #define RGBA_GETGREEN(rgb)      (((rgb) >> 8) & 0xff)
  5197. function RGBA_GETGREEN(rgb: TD3DColor): DWORD;
  5198. begin
  5199.   Result := (rgb shr 8) and $ff;
  5200. end;
  5201.  
  5202. // #define RGBA_GETBLUE(rgb)       ((rgb) & 0xff)
  5203. function RGBA_GETBLUE(rgb: TD3DColor): DWORD;
  5204. begin
  5205.   Result := rgb and $ff;
  5206. end;
  5207.  
  5208. // #define RGBA_MAKE(r, g, b, a)   ((TD3DColor) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b)))
  5209. function RGBA_MAKE(r, g, b, a: DWORD): TD3DColor;
  5210. begin
  5211.   Result := (a shl 24) or (r shl 16) or (g shl 8) or b;
  5212. end;
  5213.  
  5214. // #define D3DRGB(r, g, b) \
  5215. //     (0xff000000L | (((long)((r) * 255)) << 16) | (((long)((g) * 255)) << 8) | (long)((b) * 255))
  5216. function D3DRGB(r, g, b: Single): TD3DColor;
  5217. begin
  5218.   Result := $ff000000 or DWORD(Round(r * 255) shl 16)
  5219.                       or DWORD(Round(g * 255) shl 8)
  5220.                       or DWORD(Round(b * 255));
  5221. end;
  5222.  
  5223. // #define D3DRGBA(r, g, b, a) \
  5224. //     (  (((long)((a) * 255)) << 24) | (((long)((r) * 255)) << 16) \
  5225. //     |   (((long)((g) * 255)) << 8) | (long)((b) * 255) \
  5226. //    )
  5227. function D3DRGBA(r, g, b, a: Single): TD3DColor;
  5228. begin
  5229.   Result := DWORD(Round(a * 255) shl 24) or DWORD(Round(r * 255) shl 16)
  5230.                                          or DWORD(Round(g * 255) shl 8)
  5231.                                          or DWORD(Round(b * 255));
  5232. end;
  5233.  
  5234. // #define RGB_GETRED(rgb)         (((rgb) >> 16) & 0xff)
  5235. function RGB_GETRED(rgb: TD3DColor): DWORD;
  5236. begin
  5237.   Result := (rgb shr 16) and $ff;
  5238. end;
  5239.  
  5240. // #define RGB_GETGREEN(rgb)       (((rgb) >> 8) & 0xff)
  5241. function RGB_GETGREEN(rgb: TD3DColor): DWORD;
  5242. begin
  5243.   Result := (rgb shr 8) and $ff;
  5244. end;
  5245.  
  5246. // #define RGB_GETBLUE(rgb)        ((rgb) & 0xff)
  5247. function RGB_GETBLUE(rgb: TD3DColor): DWORD;
  5248. begin
  5249.   Result := rgb and $ff;
  5250. end;
  5251.  
  5252. // #define RGBA_SETALPHA(rgba, x) (((x) << 24) | ((rgba) & 0x00ffffff))
  5253. function RGBA_SETALPHA(rgba: TD3DColor; x: DWORD): TD3DColor;
  5254. begin
  5255.   Result := (x shl 24) or (rgba and $00ffffff);
  5256. end;
  5257.  
  5258. // #define RGB_MAKE(r, g, b)       ((TD3DColor) (((r) << 16) | ((g) << 8) | (b)))
  5259. function RGB_MAKE(r, g, b: DWORD): TD3DColor;
  5260. begin
  5261.   Result := (r shl 16) or (g shl 8) or b;
  5262. end;
  5263.  
  5264. // #define RGBA_TORGB(rgba)       ((TD3DColor) ((rgba) & 0xffffff))
  5265. function RGBA_TORGB(rgba: TD3DColor): TD3DColor;
  5266. begin
  5267.   Result := rgba and $00ffffff;
  5268. end;
  5269.  
  5270. // #define RGB_TORGBA(rgb)        ((TD3DColor) ((rgb) | 0xff000000))
  5271. function RGB_TORGBA(rgb: TD3DColor): TD3DColor;
  5272. begin
  5273.   Result := rgb or $ff000000;
  5274. end;
  5275.  
  5276.  
  5277. function D3DSTATE_OVERRIDE(StateType: DWORD): DWORD;
  5278. begin
  5279.   Result := StateType + D3DSTATE_OVERRIDE_BIAS;
  5280. end;
  5281.  
  5282. function D3DTRIFLAG_STARTFLAT(len: DWORD): DWORD;
  5283. begin
  5284.   if not (len in [1..29]) then len := 0;
  5285.   Result := len;
  5286. end;
  5287.  
  5288. // #define D3DRENDERSTATE_STIPPLEPATTERN(y) (D3DRENDERSTATE_STIPPLEPATTERN00 + (y))
  5289. function D3DRENDERSTATE_STIPPLEPATTERN(y: Integer): TD3DRenderStateType;
  5290. begin
  5291.   Result := TD3DRenderStateType(Ord(D3DRENDERSTATE_STIPPLEPATTERN00) + y);
  5292. end;
  5293.  
  5294.  
  5295.  
  5296.  
  5297.     // Addition and subtraction
  5298. function VectorAdd(const v1, v2: TD3DVector): TD3DVector;
  5299. begin
  5300.   Result.x := v1.x+v2.x;
  5301.   Result.y := v1.y+v2.y;
  5302.   Result.z := v1.z+v2.z;
  5303. end;
  5304.  
  5305. function VectorSub(const v1, v2: TD3DVector): TD3DVector;
  5306. begin
  5307.   Result.x := v1.x-v2.x;
  5308.   Result.y := v1.y-v2.y;
  5309.   Result.z := v1.z-v2.z;
  5310. end;
  5311.  
  5312.     // Scalar multiplication and division
  5313. function VectorMulS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  5314. begin
  5315.   Result.x := v.x*s;
  5316.   Result.y := v.y*s;
  5317.   Result.z := v.z*s;
  5318. end;
  5319.  
  5320. function VectorDivS(const v: TD3DVector; s: TD3DValue): TD3DVector;
  5321. begin
  5322.   Result.x := v.x/s;
  5323.   Result.y := v.y/s;
  5324.   Result.z := v.z/s;
  5325. end;
  5326.  
  5327.     // Memberwise multiplication and division
  5328. function VectorMul(const v1, v2: TD3DVector): TD3DVector;
  5329. begin
  5330.   Result.x := v1.x*v2.x;
  5331.   Result.y := v1.y*v2.y;
  5332.   Result.z := v1.z*v2.z;
  5333. end;
  5334.  
  5335. function VectorDiv(const v1, v2: TD3DVector): TD3DVector;
  5336. begin
  5337.   Result.x := v1.x/v2.x;
  5338.   Result.y := v1.y/v2.y;
  5339.   Result.z := v1.z/v2.z;
  5340. end;
  5341.  
  5342.     // Vector dominance
  5343. function VectorSmaller(v1, v2: TD3DVector): boolean;
  5344. begin
  5345.   result := (v1.x < v2.x) and (v1.y < v2.y) and (v1.z < v2.z);
  5346. end;
  5347.  
  5348. function VectorSmallerEqual(v1, v2: TD3DVector): boolean;
  5349. begin
  5350.   result := (v1.x <= v2.x) and (v1.y <= v2.y) and (v1.z <= v2.z);
  5351. end;
  5352.  
  5353.     // Bitwise equality
  5354. function VectorEqual(v1, v2: TD3DVector): boolean;
  5355. begin
  5356.   result := (v1.x = v2.x) and (v1.y = v2.y) and (v1.z = v2.z);
  5357. end;
  5358.  
  5359.     // Length-related functions
  5360. function VectorSquareMagnitude(v: TD3DVector): TD3DValue;
  5361. begin
  5362.   result := (v.x*v.x) + (v.y*v.y) + (v.z*v.z);
  5363. end;
  5364.  
  5365. function VectorMagnitude(v: TD3DVector): TD3DValue;
  5366. begin
  5367.   result := sqrt((v.x*v.x) + (v.y*v.y) + (v.z*v.z));
  5368. end;
  5369.  
  5370.     // Returns vector with same direction and unit length
  5371. function VectorNormalize(const v: TD3DVector): TD3DVector;
  5372. begin
  5373.   result := VectorDivS(v,VectorMagnitude(v));
  5374. end;
  5375.  
  5376.     // Return min/max component of the input vector
  5377. function VectorMin(v: TD3DVector): TD3DValue;
  5378. var
  5379.   ret : TD3DValue;
  5380. begin
  5381.   ret := v.x;
  5382.   if (v.y < ret) then ret := v.y;
  5383.   if (v.z < ret) then ret := v.z;
  5384.   Result := ret;
  5385. end;
  5386.  
  5387. function VectorMax(v: TD3DVector): TD3DValue;
  5388. var
  5389.   ret : TD3DValue;
  5390. begin
  5391.   ret := v.x;
  5392.   if (ret < v.y) then ret := v.y;
  5393.   if (ret < v.z) then ret := v.z;
  5394.   Result := ret;
  5395. end;
  5396.  
  5397.     // Return memberwise min/max of input vectors
  5398. function VectorMinimize(const v1, v2: TD3DVector): TD3DVector;
  5399. begin
  5400.   if v1.x < v2.x then Result.x := v1.x else Result.x := v2.x;
  5401.   if v1.y < v2.y then Result.y := v1.y else Result.y := v2.y;
  5402.   if v1.z < v2.z then Result.z := v1.z else Result.z := v2.z;
  5403. end;
  5404.  
  5405. function VectorMaximize(const v1, v2: TD3DVector): TD3DVector;
  5406. begin
  5407.   if v1.x > v2.x then Result.x := v1.x else Result.x := v2.x;
  5408.   if v1.y > v2.y then Result.y := v1.y else Result.y := v2.y;
  5409.   if v1.z > v2.z then Result.z := v1.z else Result.z := v2.z;
  5410. end;
  5411.  
  5412.     // Dot and cross product
  5413. function VectorDotProduct(v1, v2: TD3DVector): TD3DValue;
  5414. begin
  5415.   Result := (v1.x*v2.x) + (v1.y * v2.y) + (v1.z*v2.z);
  5416. end;
  5417.  
  5418. function VectorCrossProduct(const v1, v2: TD3DVector): TD3DVector;
  5419. begin
  5420.   Result.x := (v1.y*v2.z) - (v1.z*v2.y);
  5421.   Result.y := (v1.z*v2.x) - (v1.x*v2.z);
  5422.   Result.z := (v1.x*v2.y) - (v1.y*v2.x);
  5423. end;
  5424.  
  5425. procedure DisableFPUExceptions;
  5426. var
  5427.   FPUControlWord: Word;
  5428. asm
  5429.   FSTCW   FPUControlWord;
  5430.   OR      FPUControlWord, $4 + $1; { Divide by zero + invalid operation }
  5431.   FLDCW   FPUControlWord;
  5432. end;
  5433.  
  5434. procedure EnableFPUExceptions;
  5435. var
  5436.   FPUControlWord: Word;
  5437. asm
  5438.   FSTCW   FPUControlWord;
  5439.   AND     FPUControlWord, $FFFF - $4 - $1; { Divide by zero + invalid operation }
  5440.   FLDCW   FPUControlWord;
  5441. end;
  5442.  
  5443. {$IFDEF DIRECT3D_VERSION_LESS_8}
  5444. function D3DErrorString(Value: HResult): String; //Full description not available yet
  5445. begin
  5446.   case Value of
  5447.     D3D_OK: Result := 'No error';
  5448.  
  5449.     D3DERR_BADMAJORVERSION: Result := 'D3DERR_BADMAJORVERSION';
  5450.     D3DERR_BADMINORVERSION: Result := 'D3DERR_BADMINORVERSION';
  5451.  
  5452.   {$IFDEF DIRECT3D_VERSION_5}
  5453.     D3DERR_INVALID_DEVICE: Result := 'D3DERR_INITFAILED';
  5454.     D3DERR_INITFAILED: Result := 'D3DERR_INITFAILED';
  5455.  
  5456.     D3DERR_DEVICEAGGREGATED: Result := 'D3DERR_DEVICEAGGREGATED';
  5457.   {$ENDIF} // DIRECT3D_VERSION_5
  5458.  
  5459.     D3DERR_EXECUTE_CREATE_FAILED: Result := 'D3DERR_EXECUTE_CREATE_FAILED';
  5460.     D3DERR_EXECUTE_DESTROY_FAILED: Result := 'D3DERR_EXECUTE_DESTROY_FAILED';
  5461.     D3DERR_EXECUTE_LOCK_FAILED: Result := 'D3DERR_EXECUTE_LOCK_FAILED';
  5462.     D3DERR_EXECUTE_UNLOCK_FAILED: Result := 'D3DERR_EXECUTE_UNLOCK_FAILED';
  5463.     D3DERR_EXECUTE_LOCKED: Result := 'D3DERR_EXECUTE_LOCKED';
  5464.     D3DERR_EXECUTE_NOT_LOCKED: Result := 'D3DERR_EXECUTE_NOT_LOCKED';
  5465.  
  5466.     D3DERR_EXECUTE_FAILED: Result := 'D3DERR_EXECUTE_FAILED';
  5467.     D3DERR_EXECUTE_CLIPPED_FAILED: Result := 'D3DERR_EXECUTE_CLIPPED_FAILED';
  5468.  
  5469.     D3DERR_TEXTURE_NO_SUPPORT: Result := 'D3DERR_TEXTURE_NO_SUPPORT';
  5470.     D3DERR_TEXTURE_CREATE_FAILED: Result := 'D3DERR_TEXTURE_CREATE_FAILED';
  5471.     D3DERR_TEXTURE_DESTROY_FAILED: Result := 'D3DERR_TEXTURE_DESTROY_FAILED';
  5472.     D3DERR_TEXTURE_LOCK_FAILED: Result := 'D3DERR_TEXTURE_LOCK_FAILED';
  5473.     D3DERR_TEXTURE_UNLOCK_FAILED: Result := 'D3DERR_TEXTURE_UNLOCK_FAILED';
  5474.     D3DERR_TEXTURE_LOAD_FAILED: Result := 'D3DERR_TEXTURE_LOAD_FAILED';
  5475.     D3DERR_TEXTURE_SWAP_FAILED: Result := 'D3DERR_TEXTURE_SWAP_FAILED';
  5476.     D3DERR_TEXTURE_LOCKED: Result := 'D3DERR_TEXTURELOCKED';
  5477.     D3DERR_TEXTURE_NOT_LOCKED: Result := 'D3DERR_TEXTURE_NOT_LOCKED';
  5478.     D3DERR_TEXTURE_GETSURF_FAILED: Result := 'D3DERR_TEXTURE_GETSURF_FAILED';
  5479.  
  5480.     D3DERR_MATRIX_CREATE_FAILED: Result := 'D3DERR_MATRIX_CREATE_FAILED';
  5481.     D3DERR_MATRIX_DESTROY_FAILED: Result := 'D3DERR_MATRIX_DESTROY_FAILED';
  5482.     D3DERR_MATRIX_SETDATA_FAILED: Result := 'D3DERR_MATRIX_SETDATA_FAILED';
  5483.     D3DERR_MATRIX_GETDATA_FAILED: Result := 'D3DERR_MATRIX_GETDATA_FAILED';
  5484.     D3DERR_SETVIEWPORTDATA_FAILED: Result := 'D3DERR_SETVIEWPORTDATA_FAILED';
  5485.  
  5486.   {$IFDEF DIRECT3D_VERSION_5}
  5487.     D3DERR_INVALIDCURRENTVIEWPORT: Result := 'D3DERR_INVALIDCURRENTVIEWPORT';
  5488.     D3DERR_INVALIDPRIMITIVETYPE: Result := 'D3DERR_INVALIDPRIMITIVETYPE';
  5489.     D3DERR_INVALIDVERTEXTYPE: Result := 'D3DERR_INVALIDVERTEXTYPE';
  5490.     D3DERR_TEXTURE_BADSIZE: Result := 'D3DERR_TEXTURE_BADSIZE';
  5491.     D3DERR_INVALIDRAMPTEXTURE: Result := 'D3DERR_INVALIDRAMPTEXTURE';
  5492.   {$ENDIF} // DIRECT3D_VERSION_5
  5493.  
  5494.     D3DERR_MATERIAL_CREATE_FAILED: Result := 'D3DERR_MATERIAL_CREATE_FAILED';
  5495.     D3DERR_MATERIAL_DESTROY_FAILED: Result := 'D3DERR_MATERIAL_DESTROY_FAILED';
  5496.     D3DERR_MATERIAL_SETDATA_FAILED: Result := 'D3DERR_MATERIAL_SETDATA_FAILED';
  5497.     D3DERR_MATERIAL_GETDATA_FAILED: Result := 'D3DERR_MATERIAL_GETDATA_FAILED';
  5498.  
  5499.   {$IFDEF DIRECT3D_VERSION_5}
  5500.     D3DERR_INVALIDPALETTE: Result := 'D3DERR_INVALIDPALETTE';
  5501.  
  5502.     D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_SYSTEMMEMORY';
  5503.     D3DERR_ZBUFF_NEEDS_VIDEOMEMORY: Result := 'D3DERR_ZBUFF_NEEDS_VIDEOMEMORY';
  5504.     D3DERR_SURFACENOTINVIDMEM: Result := 'D3DERR_SURFACENOTINVIDMEM';
  5505.   {$ENDIF} // DIRECT3D_VERSION_5
  5506.  
  5507.     D3DERR_LIGHT_SET_FAILED: Result := 'D3DERR_LIGHT_SET_FAILED';
  5508.   {$IFDEF DIRECT3D_VERSION_5}
  5509.     D3DERR_LIGHTHASVIEWPORT: Result := 'D3DERR_LIGHTHASVIEWPORT';
  5510.     D3DERR_LIGHTNOTINTHISVIEWPORT: Result := 'D3DERR_LIGHTNOTINTHISVIEWPORT';
  5511.   {$ENDIF} // DIRECT3D_VERSION_5
  5512.  
  5513.     D3DERR_SCENE_IN_SCENE: Result := 'D3DERR_SCENE_IN_SCENE';
  5514.     D3DERR_SCENE_NOT_IN_SCENE: Result := 'D3DERR_SCENE_NOT_IN_SCENE';
  5515.     D3DERR_SCENE_BEGIN_FAILED: Result := 'D3DERR_SCENE_BEGIN_FAILED';
  5516.     D3DERR_SCENE_END_FAILED: Result := 'D3DERR_SCENE_END_FAILED';
  5517.  
  5518.   {$IFDEF DIRECT3D_VERSION_5}
  5519.     D3DERR_INBEGIN: Result := 'D3DERR_INBEGIN';
  5520.     D3DERR_NOTINBEGIN: Result := 'D3DERR_NOTINBEGIN';
  5521.     D3DERR_NOVIEWPORTS: Result := 'D3DERR_NOVIEWPORTS';
  5522.     D3DERR_VIEWPORTDATANOTSET: Result := 'D3DERR_VIEWPORTDATANOTSET';
  5523.     D3DERR_VIEWPORTHASNODEVICE: Result := 'D3DERR_VIEWPORTHASNODEVICE';
  5524.     D3DERR_NOCURRENTVIEWPORT: Result := 'D3DERR_NOCURRENTVIEWPORT';
  5525.   {$ENDIF} // DIRECT3D_VERSION_5
  5526.  
  5527.   {$IFDEF DIRECT3D_VERSION_6}
  5528.     D3DERR_INVALIDVERTEXFORMAT: Result := 'D3DERR_INVALIDVERTEXFORMAT';
  5529.  
  5530.     D3DERR_COLORKEYATTACHED: Result := 'D3DERR_COLORKEYATTACHED';
  5531.  
  5532.     D3DERR_VERTEXBUFFEROPTIMIZED: Result := 'D3DERR_VERTEXBUFFEROPTIMIZED';
  5533.     D3DERR_VBUF_CREATE_FAILED: Result := 'D3DERR_VBUF_CREATE_FAILED';
  5534.     D3DERR_VERTEXBUFFERLOCKED: Result := 'D3DERR_VERTEXBUFFERLOCKED';
  5535.  
  5536.     D3DERR_ZBUFFER_NOTPRESENT: Result := 'D3DERR_ZBUFFER_NOTPRESENT';
  5537.     D3DERR_STENCILBUFFER_NOTPRESENT: Result := 'D3DERR_STENCILBUFFER_NOTPRESENT';
  5538.  
  5539.     D3DERR_WRONGTEXTUREFORMAT: Result := 'D3DERR_WRONGTEXTUREFORMAT';
  5540.     D3DERR_UNSUPPORTEDCOLOROPERATION: Result := 'D3DERR_UNSUPPORTEDCOLOROPERATION';
  5541.     D3DERR_UNSUPPORTEDCOLORARG: Result := 'D3DERR_UNSUPPORTEDCOLORARG';
  5542.     D3DERR_UNSUPPORTEDALPHAOPERATION: Result := 'D3DERR_UNSUPPORTEDALPHAOPERATION';
  5543.     D3DERR_UNSUPPORTEDALPHAARG: Result := 'D3DERR_UNSUPPORTEDALPHAARG';
  5544.     D3DERR_TOOMANYOPERATIONS: Result := 'D3DERR_TOOMANYOPERATIONS';
  5545.     D3DERR_CONFLICTINGTEXTUREFILTER: Result := 'D3DERR_CONFLICTINGTEXTUREFILTER';
  5546.     D3DERR_UNSUPPORTEDFACTORVALUE: Result := 'D3DERR_UNSUPPORTEDFACTORVALUE';
  5547.  
  5548.     D3DERR_CONFLICTINGRENDERSTATE: Result := 'D3DERR_CONFLICTINGRENDERSTATE';
  5549.     D3DERR_UNSUPPORTEDTEXTUREFILTER: Result := 'D3DERR_UNSUPPORTEDTEXTUREFILTER';
  5550.     D3DERR_TOOMANYPRIMITIVES: Result := 'D3DERR_TOOMANYPRIMITIVES';
  5551.     D3DERR_INVALIDMATRIX: Result := 'D3DERR_INVALIDMATRIX';
  5552.     D3DERR_TOOMANYVERTICES: Result := 'D3DERR_TOOMANYVERTICES';
  5553.     D3DERR_CONFLICTINGTEXTUREPALETTE: Result := 'D3DERR_CONFLICTINGTEXTUREPALETTE';
  5554.   {$ENDIF} // DIRECT3D_VERSION_6
  5555.  
  5556.   {$IFDEF DIRECT3D_VERSION_7}
  5557.     D3DERR_INVALIDSTATEBLOCK: Result := 'D3DERR_INVALIDSTATEBLOCK';
  5558.     D3DERR_INBEGINSTATEBLOCK: Result := 'D3DERR_INBEGINSTATEBLOCK';
  5559.     D3DERR_NOTINBEGINSTATEBLOCK: Result := 'D3DERR_NOTINBEGINSTATEBLOCK';
  5560.   {$ENDIF} // DIRECT3D_VERSION_7
  5561.  
  5562.     else Result := 'Unrecognized Error';
  5563.   end;
  5564. end;
  5565. {$ENDIF} // DIRECT3D_VERSION_LESS_8
  5566.  
  5567. {$IFNDEF EXCLUDE_DXFILE_FROM_DIRECT3D}
  5568.  
  5569. function DXFileErrorString(Value: HResult): string;
  5570. begin
  5571.   case Value of
  5572.     DXFILE_OK: Result := 'Command completed successfully. Equivalent to DD_OK.';
  5573.     DXFILEERR_BADVALUE: Result := 'Parameter is invalid.';
  5574.     DXFILEERR_BADTYPE: Result := 'Object type is invalid.';
  5575.     DXFILEERR_BADALLOC: Result := 'Memory allocation failed.';
  5576.     DXFILEERR_NOTFOUND: Result := 'Object could not be found.';
  5577.     DXFILEERR_FILENOTFOUND: Result := 'File could not be found.';
  5578.     DXFILEERR_RESOURCENOTFOUND: Result := 'Resource could not be found.';
  5579.     DXFILEERR_URLNOTFOUND: Result := 'URL could not be found.';
  5580.     DXFILEERR_BADRESOURCE: Result := 'Resource is invalid.';
  5581.     DXFILEERR_BADFILETYPE: Result := 'File is not a DirectX file.';
  5582.     DXFILEERR_BADFILEVERSION: Result := 'File version is not valid.';
  5583.     DXFILEERR_BADFILEFLOATSIZE: Result := 'Floating-point size is invalid.';
  5584.     DXFILEERR_BADFILE: Result := 'File is invalid.';
  5585.     DXFILEERR_PARSEERROR: Result := 'File could not be parsed.';
  5586.     DXFILEERR_BADARRAYSIZE: Result := 'Array size is invalid.';
  5587.     DXFILEERR_BADDATAREFERENCE: Result := 'Data reference is invalid.';
  5588.     DXFILEERR_NOMOREOBJECTS: Result := 'All objects have been enumerated.';
  5589.     DXFILEERR_NOMOREDATA: Result := 'No further data is available.';
  5590.     else Result := 'Unrecognized Error';
  5591.   end;
  5592. end;
  5593.  
  5594.  
  5595. initialization
  5596. begin
  5597.   DisableFPUExceptions;
  5598.   DXFileDLL := LoadLibrary('D3DXOF.DLL');
  5599.   DirectXFileCreate := GetProcAddress(DXFileDLL,'DirectXFileCreate');
  5600. end;
  5601.  
  5602. finalization
  5603. begin
  5604.   FreeLibrary(DXFileDLL);
  5605. end;
  5606.  
  5607. {$ENDIF}
  5608. end.
  5609.  
  5610.